CakePHP基于角色的验证


CakePHP role based auth

编辑:Version: 2.5.7

我正在尝试使用CakePHP设置基于角色的身份验证。到目前为止,我已经设法获得身份验证工作ok,其中控制器访问重定向到登录屏幕时,没有身份验证,并允许访问时,我身份验证..

我的问题来了,当我想要某些"管理"级别访问某些操作方法,(前缀admin_),但拒绝他们定期登录。

如果我在beforeFilter中取消注释$this->Auth->authorize,我的认证工作正常..注释它,我无法登录。

有一

public function isAuthorized() {
    if (!empty($this->params['action']) &&  (strpos($this->params['action'],'admin_') !== false) ) {
        if ($this->Auth->user('admin')) {
                return true;
        }
    }
    return false;
}
public function beforeFilter()
{
    $this->Auth->authorize = 'controller';
    $this->Auth->deny(); //deny everythng
}

我的Dashboard控制器是成功登录后的第一个屏幕。滤镜前是这样的。我需要在某处放置一个parent:: isAuthorized调用吗?或者isAuthorized呼叫是什么时候打的?我可以告诉它是触发,但只是不确定为什么我被踢回登录屏幕,当我实现它。

仪表板控制器。

public function beforeFilter()
    {
        parent::beforeFilter();
    }

找到了一个解决方案

Cookbook告诉你这样做:http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html

(参见PostController)。我将希望普通登录用户看到的操作列入白名单,父类isAuthorized处理管理场景。

指示板控制器

public function isAuthorized($user) {
    $actions = array("stats","index");
    if (in_array($this->action, $actions)) {
        return true;
    }
return parent::isAuthorized($user);
}

这种方法的问题是,让我的每个控制器都有这种白名单代码是非常痛苦的。我觉得很丑