CakePHP 3:管理员前缀的特定授权

CakePHP 3 : specific authorization for admin prefix

我正在尝试对小 news/blog 设置一些限制。

我制作了以下 admin 前缀路由:

Router::prefix('admin', function ($routes) {
    $routes->connect('/', ['controller' => 'Articles', 'action' => 'index']);
    $routes->connect('/:controller/:action/*', ['controller' => 'controller', 'action' => 'action']);
});

我的问题是 beforeFilter 中的这条规则 $this->Auth->allow(['index', 'view', 'display']); 每个人都可以访问 /admin/Articles/index/admin/Users/index 操作

如果我像下面那样使用 isAuthorized 函数,它可以解决经过身份验证的用户的问题,但不能解决匿名用户的问题:

public function isAuthorized($user = null)
    {
        // Any registered user can access public functions
        if (empty($this->request->params['prefix'])) {
            return true;
        }

        // Only admins can access admin functions
        if ($this->request->params['prefix'] === 'admin') {
            return (bool)($user['role'] === 'admin');
        }

        // Default deny
        return false;
}

有什么方法可以限制 admin 前缀的所有操作只能由经过身份验证的用户访问吗?

在您的 beforeFilter 回调中添加条件:

public function beforeFilter(/* ... */) {
    if (empty($this->request->params['prefix'])
        || $this->request->params['prefix'] !== 'admin') {
        $this->Auth->allow(['index', 'view', 'display']) ;
    }
}