以下由我們在信易網絡公司開發項目的時候終結出的一些經驗
主要參考資料: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
新聞熱點
疑難解答