我的管理中心页面当前位于PagesController(称为admin)中。但是,未登录的用户和非管理员用户都可以访问此中心页面,即使他们无法访问该中心的所有链接。
编辑:我刚刚意识到它可能无法正常工作,因为" admin"不是PagesController中的一个函数,而是属于" display"。
我的AppController如下:
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth',[
'authorize' => 'Controller',
]);
$this->Auth->allow(['display']);
}
public function beforeFilter(Event $event)
{
$this->Auth->deny(['admin']);
}
我的PagesController如下:
public function initialize()
{
parent::initialize();
$this->Auth->deny(['admin']);
}
public function isAuthorized($user)
{
if (in_array($this->request->action,['admin'])) {
return (bool)($user['role_id'] === 1); //where role_id = 1 refers to an admin
}
return parent::isAuthorized($user);
}
答案 0 :(得分:1)
Auth-> deny()函数用于防止未经授权的用户访问操作。另一方面,Auth-> allow()函数是为公众提供对特定(或所有)操作的访问权。
要使Auth组件按需运行,请阅读以下内容:假设您有一个不同的管理员用户数据库表,并且您想要访问者访问受限页面的凭据,您可以执行以下操作:
在AppController中,当用户访问受限页面时,或者在用户访问PagesController的情况下,加载Auth组件并确保在Auth组件中定义了admin用户表,或者在命名时遵循Cakephp约定表
在AppController中
public function initialize()
{
parent::initialize();
if ($this->request->params["controller"] == 'Pages') {
$this->loadComponent('Auth', [
'loginAction' => [
'controller' => 'Access',
'action' => 'admin_login',
'plugin' => 'Access'
],
'loginRedirect' => [
'controller' => 'Access',
'action' => 'admin_index',
'plugin' => 'Access'
],
'authenticate' => [
'Form' => [
'userModel' => 'your-admin-database-table'
]
]
]);
}
}
在PagesController中,您需要以下内容:
public function initialize()
{
parent::initialize();
}
loginAction - 用于管理员登录。 loginRedirect - 登录后登陆管理员用户的位置。 authenticate - 用于定义表单详细信息,例如数据库名称和字段。
可以在此处找到非常详细的文档:https://book.cakephp.org/3.0/en/controllers/components/authentication.html
编辑:请注意,代码尚未经过测试
答案 1 :(得分:0)
您正在检查操作,而不是前缀。 Documentation表明你想要的是
if ($this->request->getParam('prefix') === 'admin')