0

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

值得怀疑的是,经过一些测试,如果我在 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”)所以这让我觉得我必须明确授权所有控制器中的管理员角色

4

1 回答 1

0

使用时ControllerAuthorize,只会在活动控制器上AuthComponent调用isAuthorized()方法。因此,在您的示例中,当从 请求任何操作时,只会调用,不允许访问具有 9 以外特权的用户。RequestsControllerRequestsController::isAuthorized()

如果您还想允许管理员用户访问,您应该更改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 - 授权

于 2018-09-15T14:06:34.867 回答