我在UsersController
中有几个方法,我试图给角色明智的访问权限。
如果
admin_list
方法。forget_password
方法)在控制器中我试过下面的代码
public $components = array('Session','RequestHandler','Auth'=>array(
'loginRedirect' => array('controller' => 'users','action' => 'dashboard'),
'logoutRedirect' => array('controller' => 'users','action' => 'login'),
'authError'=>'You can not access this page!!',
'authenticate' => array(
'Form' => array(
'fields' => array(
'username' => 'email', //Default is 'username' in the userModel
'password' => 'password' //Default is 'password' in the userModel
)
),
),
'authorize' => array('Controller')
));
public function isAuthorized($user) {
return true;
}
在我允许的过滤器之前
$this->Auth->allow('login','logout');
现在在UserController
我尝试过以下代码
public function isAuthorized($user) {
// Admin can access every action
if (isset($user['usertype_id']) && $user['usertype_id'] == 1) {
return true;
}
else if(isset($user['usertype_id']) && $user['usertype_id'] == 2)
{
$this->Auth->deny('admin_list');
}else
$this->Auth->allow('change_password');
return parent::isAuthorized($user);
}
问题是它总是返回真实。如果我使用user_type = 3登录,我可以访问所有方法。
答案 0 :(得分:1)
Auth::allow()
和Auth::deny()
用于定义非登录用户允许访问哪些操作(身份验证),并且不用于< EM>授权
为此,您必须像控制器一样在控制器中定义isAuthorized()
。但是,此方法应返回true
(已登录的用户/组有权访问操作)或false
(授权被拒绝)。
您的UsersController::isAuthorized()
方法应改写为:
public function isAuthorized($user) {
if (!isset($user['usertype_id'])) {
return false;
}
if($user['usertype_id'] == 2 && $this->action=='admin_list') {
return false;
}
if($user['usertype_id'] == 3) && $this->action!='forget_password'){
return false;
}
return true;
}
有关ControllerAuthorize的更多信息,请参阅食谱。