Cakephp 2.6:角色明智 isAuthorized 不工作

Cakephp 2.6 : Role wise isAuthorized not working

我在 UsersController 中有几种方法,我正在尝试授予角色明智的访问权限。 如果

  1. user_types == 1(用户可以访问所有方法)
  2. user_types == 2(用户无法访问 admin_list 方法。
  3. 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 的更多信息,请参阅食谱。