编辑: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);
}
这种方法的问题是,让我的每个控制器都有这种白名单代码是非常痛苦的。我觉得很丑