CakePHP自动重定向管理员404到登录
我使用Auth组件和ACL授予角色权限,如果角色没有适当的权限,则将其重定向到/login 这适用于所有现有控制器/操作。但每当我输入一个不存在的控制器动作CakePHP自动重定向管理员404到登录,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我使用Auth组件和ACL授予角色权限,如果角色没有适当的权限,则将其重定向到/login 这适用于所有现有控制器/操作。但每当我输入一个不存在的控制器动作http://www.mypage.de/fake/bla我得到了一个NotFoundException 我的问题是,用户看到了我的管理布局,因为404是在管理布局模板中呈现的 有没有办法说admin(或任何前缀)总是受到限制,而未登录的用户会被重定向到登录页面? 我想到的是这个,但我不喜欢它,因为我必须对所有其他前缀做同样的操作 /**
http://www.mypage.de/fake/bla
我得到了一个NotFoundException
我的问题是,用户看到了我的管理布局,因为404是在管理布局模板中呈现的
有没有办法说admin(或任何前缀)总是受到限制,而未登录的用户会被重定向到登录页面?
我想到的是这个,但我不喜欢它,因为我必须对所有其他前缀做同样的操作
/**
* AppController::afterFilter()
*
* @return void
*/
function afterFilter() {
if ($this->response->statusCode() === 404 && !empty($this->request->params['admin'])) {
$url = Router::url(
array(
'admin' => false,
'plugin' => false,
'controller' => 'users',
'action' => 'login'
)
);
$this->Common->flashMessage(__('You are not authorized to access that location.'), 'error');
return $this->redirect($url);
}
}
您的代码实际上做得很好,但除了在
foreach
循环中执行之外,没有办法自动为每个前缀执行此操作:
function afterFilter() {
if($this->response->statusCode() === 404) {
foreach(array('admin', 'otherprefix') as $prefix) {
if(!empty($this->request->params[$prefix])) {
[...]
}
}
}
}
如果您想对所有404错误一视同仁——不管可能的前缀是什么——您只需更改404错误的布局即可:
function afterFilter() {
if($this->response->statusCode() === 404) {
$this->layout = 'default';
}
}
这样,没有人会在任何404页面上看到管理员布局