Cakephp:AuthComponent 评估顺序以及如何重定向到操作

Cakephp: AuthComponent Evaluation Order and how to redirect to an action

大家好,关于 auth 组件,我正在做一些测试以更好地理解该工具,在概念探索中,我希望授权经过身份验证的管理员用户访问任何操作,但如果授权用户具有 "supervisor" 角色只能对 "RequestsController.php" 中的动作进行索引、查看和编辑,我正在尝试这种方法: 1) 允许管理员角色的一切,拒绝 AppController.php 中其他任何人的一切。 2) 在 "RequestsController.php" 中明确允许 "supervisor" 并拒绝任何其他角色。

怀疑是,经过一些测试后发生的情况是,如果我只在 AppController.php 中授权管理员用户,重定向只允许我转到 /webroot/,但如果我在 RequestsController.php。我可以毫无问题地看到请求

AppController 中的 IsAuthorize 方法

    public function isAuthorized($user)
    {
        //privileges 1 means admin
        if ($user['privileges']==1){
            debug($user);
            return true;
        } else {
            debug($user);
            return false;
        }
    }

请求控制器中的 IsAuthorize 方法

    public function isAuthorized($user)
    {
        //privileges 9 means supervisor
        if ($user['privileges']==9){
            debug($user);
            $action = $this->request->getParam('action');
            if (in_array($action, ['index', 'view', 'edit'])) {
                debug($user);
                return true;
            }
            return false;
        } else {
            debug($user);
            return false;
        }

    }

因为我不清楚 isAuthorized 函数的处理顺序,或者为什么重定向到请求(即使它是 "AppController.php" 或 "RequestsController.php")所以这让我觉得我必须明确授权所有控制器中的管理员角色

当使用 ControllerAuthorize 时,AuthComponent 将仅在 active 控制器上调用 isAuthorized() 方法。因此,在您的示例中,当从 RequestsController 请求任何操作时,只会调用 RequestsController::isAuthorized(),不允许访问具有 9.

以外特权的用户

如果您也想允许管理员用户访问,您应该按如下方式更改 RequestsController::isAuthorized()

public function isAuthorized($user)
{
    //privileges 9 means supervisor
    if ($user['privileges']==9){
        debug($user);
        $action = $this->request->getParam('action');
        if (in_array($action, ['index', 'view', 'edit'])) {
            debug($user);
            return true;
        }
        return false;
    } else {
        debug($user);
        return parent::isAuthorized($user); //changed this line
    }

}

附加信息:CakePHP 3.x AuthComponent - Authorization