以下由我們在信易網路公司開發項目的時候終結出的一些經驗
主要參考資料: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表裡不同層級使用者,實行不同的授權,而不是用硬式編碼形式控制。
回到demo blog,我先對資料庫的tbl_user表做修改,在原來的基礎上加上role一項。對原來的使用者資訊記錄添加role的value為"管理員"或"一般使用者"。
然後依次執行以下3個步驟:
1. 建立組件WebUser,它是對CWebUser的擴充。
2. 修改config/main.php檔案。
3.修改accessRules()。
具體細節如下:
1.WebUser.php 組件代碼:
class 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
http://www.bkjia.com/PHPjc/769339.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/769339.htmlTechArticle以下由我們在信易網路公司開發項目的時候終結出的一些經驗 主要參考資料:yii官網http://www.yiiframework.com/wiki/60/ yii framework 提供了2套許可權訪...