国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Yii 權限分級式訪問控制實現(非RBAC法)

2019-11-15 01:35:23
字體:
來源:轉載
供稿:網友
Yii 權限分級式訪問控制實現(非RBAC法)

以下由我們在信易網絡公司開發項目的時候終結出的一些經驗

主要參考資料:yii官網http://www.yiiframework.com/wiki/60/yii framework 提供了2套權限訪問系統,一套是簡單的filter(過濾器)模式,另一套是復雜全面的RBAC模式,我這里要講的是第一套(因為我也剛剛學到這里)。如 果你有研究過YII官方的demo blog,一定知道,比如,由gii自動生成的user模塊,自動附帶了簡單的filter權限分配功能,具體細節請參照blog手冊的“用戶驗證”一章 節,以及yii官方指南的“驗證和授權”一章節。(注意,我這里所指的模塊,只是我個人對與user有關的文件的統稱,與yii文件系統的模塊 (module)含義不同。)關于權限分配的文件大多在controllers里,比如打開UserController.php文件你會看到2個類函數。public function filters() { return array( 'accessControl', //實現CRUD操作的訪問控制。 'postOnly + delete', ); }public function accessRules()//這里就是訪問規則的設置。 { return array( array('allow', //允許所有用戶執行index,view動作。 'actions'=>array('index','view'), 'users'=>array('*'), //*號標識所有用戶包括注冊的、沒注冊的、一般的、管理員級的 ), array('allow', // 只允許經過驗證的用戶執行create, update動作。 'actions'=>array('create','update'), 'users'=>array('@'), // @號指所有注冊的用戶 ), array('allow', //只允許用戶名是admin的用戶執行admin,delete動作 'actions'=>array('admin','delete'), 'users'=>array('admin'),//admin就是指用戶名是admin的用戶,以硬編碼的形式分配用戶權限。 ), array('deny', // 拒絕所有的訪問。 'users'=>array('*'), ), ); }關于更多的訪問規則的設定請參照官方文件http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter好了,現在要開始按照我們自己的需求設置適合自己的權限分配了。我們希望filter訪問控制模式能更完美一點,按照常識,我們希望它能按照數據庫里user表里不同級別用戶,實行不同的授權,而不是用硬編碼的形式控制?;氐絛emo blog,我先對數據庫的tbl_user表做修改,在原來的基礎上加上role一項。對原來的用戶信息記錄添加role的value為"管理員"或"一般用戶"。然后依次執行以下3個步驟:

1. 創建組件WebUser,它是對CWebUser的擴展。2. 修改config/main.php文件。

3.修改accessRules()。

具體細節如下:

1.WebUser.php 組件代碼:

<?phpclass WebUser extends CWebUser { PRivate $_model; function getFirst_Name(){ $user = $this->loadUser(Yii::app()->user->id); return $user->first_name; } function isAdmin(){ $user = $this->loadUser(Yii::app()->user->id); if ($user==null) return 0; else return $user->role == "管理員"; } protected function loadUser($id=null) { if($this->_model===null) { if($id!==null) $this->_model=User::model()->findByPk($id); } return $this->_model; }}?>

2.在config/main.php找到如下代碼,添加標紅色的代碼。

'components'=>array( 'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true,'class'=>'WebUser', ),

3.找到需要更改權限的controller類,對accessRules()函數做修改,比如對前文的accessRules()函數做如下修改:(注意標紅色代碼)

public function accessRules() { return array( array('allow', // 允許所有用戶執行index,view動作。 'actions'=>array('index','view'), 'users'=>array('*'), //*號標識所有用戶包括注冊的、沒注冊的、一般的、管理員級的 ), array('allow', // 只允許經過驗證的用戶執行create, update動作。 'actions'=>array('create','update'), 'users'=>array('@'), // @號指所有注冊的用戶 ), array('allow', // 只允許用戶名是admin的用戶執行admin,delete動作 'actions'=>array('admin','delete'), 'expression'=>'yii::app()->user->isAdmin()',//這樣只有標識為“管理員”的用戶才能訪問admin,delete動作 ), array('deny', 'users'=>array('*'), ), );

本文由專注于成都網站建設的信易網絡發布,更多關于yii的信息請關注信易網絡隨后的發布,信易網絡的官網http://www.ir58.com


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乃东县| 渭源县| 瑞安市| 江阴市| 秦安县| 十堰市| 阿拉善盟| 台江县| 蒙城县| 富源县| 诏安县| 东山县| 涞水县| 香港| 当雄县| 延安市| 湘西| 庆城县| 江山市| 阿图什市| 观塘区| 闽清县| 江达县| 车险| 湖州市| 新兴县| 定兴县| 河间市| 沁源县| 海原县| 丰台区| 荥经县| 阿合奇县| 八宿县| 万安县| 凤冈县| 芜湖市| 武城县| 大理市| 阜新市| 中牟县|