我正在尝试编写一些简单的功能来区分我正在编写的CakePHP应用程序中的管理员和常规用户。我已将users
表格更改为名为admin
的字段,该字段为0
或1
。
在AppController.php
中,我设置了$components
数组:
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Blowfish' => array(
'fields' => array('username' => 'email')
)
),
'loginRedirect' => array('controller' => 'pages', 'action' => 'home'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
'authorize' => array('Controller')
)
);
还有这种方法:
public function isAuthorized($user) {
// Check if admin
if(isset($this->params['admin']) && $this->Auth->user('admin') == 1) {
echo "admin";
return true;
}
// Default deny
return false;
}
当我加载页面时,我收到此错误:(net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.
。由于某种原因,上面的代码导致无限重定向,我无法解决原因。
此外,我为admin
设置了路由前缀,以便管理员可以访问/admin/users/edit
等网址。当我转到该页面时,我没有获得无限重定向,而admin
echo
就像它应该的那样。
我已经在线阅读了教程并阅读了Cake文档,但它们似乎都以无限重定向结束,我如何设置它以便我可以区分管理员和普通用户,并拒绝/允许访问某些每个角色的行动?
答案 0 :(得分:0)
第六点已经指出了这一点。
如果没有Auth对象,Auth组件将重定向到Pages Controller,我认为您缺少
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow("*"); // * or array("actions", "that", "are", "allowed")
}
因此,这实质上是创建一个无限循环,缺少First Auth对象,它被定向到PagesController。 Auth组件已配置为授权所有控制器,包括PagesController。循环重复重定向到PagesController。
您是否尝试过调查ACL?您可以通过使用角色和ACL来实现相同目的。