在YII開發中,我們可以通過控制器中對accessRules函數的配置進行相應動作許可權控制,預設情況下可能是這樣:
public function accessRules()
{
……
array('allow',
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny',
'users'=>array('*'),
),
);
}
在函數中可以配置具體哪些使用者可以訪問某些動作,但是在開發過程中我們很容易會發現上面有的幾個方式完全不夠用,於是不約而同地就會相對這個能不能訪問的規則是否能讓我們自訂了,答案是肯定的,確實可以自訂。
具體方法是這樣的(主要是用到accessRules中的expression屬性):
在accessRules函數體中:
return array(
array('allow',
'actions'=>array('admin'),
'expression'=>array($this,'getadvancedusers'),
),
……
);
沒錯就是這一句“ 'expression'=>array($this,'advancedusers')”,我想相信接下來大家就很清楚了,就是在這個控制器中添加一個advancedusers函數(該函數名自己可以根據自己的需要修改),函數如下:
public function advancedusers()
{
$users=Users::model()->findByAttributes(array('uid'=>Yii::app()->user->id));
return ($users->ugid == 1);//看目前使用者的使用者組ID是否為1(我這裡1代表進階使用者)
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,delete 'actions'=>array('admin','delete'), 'users'=>array('admin'), ), array('deny', // 禁止所有使用者操作 'users'=>array('*'), ), ); }
}
這裡返回一個bool值,返回0代表檢查不通過,就是說沒有訪問admin這個動作的許可權。