Cakephp 2.6:角色明智 isAuthorized 不工作
Cakephp 2.6 : Role wise isAuthorized not working
我在 UsersController
中有几种方法,我正在尝试授予角色明智的访问权限。
如果
- user_types == 1(用户可以访问所有方法)
- user_types == 2(用户无法访问
admin_list
方法。
- user_types == 3(用户只能访问
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);
}
问题是它总是返回 true。如果我使用 user_type = 3 登录,我可以访问所有方法。
Auth::allow()
和 Auth::deny()
是为了定义允许非登录用户访问的操作(authentication),而不是用于授权.
为此,您必须像您所做的那样在控制器中定义 isAuthorized()
。不过这个方法应该是returntrue
(登录user/group被授权访问的动作)或者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 的更多信息,请参阅食谱。
我在 UsersController
中有几种方法,我正在尝试授予角色明智的访问权限。
如果
- user_types == 1(用户可以访问所有方法)
- user_types == 2(用户无法访问
admin_list
方法。 - user_types == 3(用户只能访问
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);
}
问题是它总是返回 true。如果我使用 user_type = 3 登录,我可以访问所有方法。
Auth::allow()
和 Auth::deny()
是为了定义允许非登录用户访问的操作(authentication),而不是用于授权.
为此,您必须像您所做的那样在控制器中定义 isAuthorized()
。不过这个方法应该是returntrue
(登录user/group被授权访问的动作)或者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 的更多信息,请参阅食谱。