编辑:版本:2.5.7
我目前正在尝试使用CakePHP设置基于角色的身份验证。到目前为止,我已经设法让身份验证工作正常,控制器访问在未经过身份验证时重定向到登录屏幕,并在我通过身份验证时允许访问..
当我想要某些“管理”级别访问某些操作方法(前缀为admin_
)但拒绝定期登录时,我的问题就来了。
如果我在beforeFilter中取消注释$this->Auth->authorize
,我的身份验证工作正常。请注意,我无法登录。
AppController的
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
}
我的仪表板控制器是成功登录后的第一个屏幕。这是在过滤器看起来像这样之前。我需要在某处放置parent :: isAuthorized调用吗?或者,究竟是什么时候进行了isAuthorized调用?我可以告诉它正在解雇,但不知道为什么我在实施时会被踢回登录界面。
仪表板控制器。
public function beforeFilter()
{
parent::beforeFilter();
}
答案 0 :(得分:1)
找到了一种解决方案(种类)
Cookbook告诉您这样做:http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html
(见PostController下)。我将我希望定期登录用户看到的操作列入白名单,并且父级isAuthorized处理管理方案。
仪表板控制器
$result->fetch_assoc()
这种方法的问题在于让每个控制器在每个控制器中都有这种白名单代码是非常痛苦的。对我来说很难过。