CakePHP自动重定向管理员404登录

时间:2015-09-16 08:35:00

标签: cakephp cakephp-2.3

我正在使用Auth组件和ACL为角色授予权限,如果他们没有适当的权限,则将其重定向到/ login。

适用于所有现有控制器/操作。但是,当我输入一个不存在的控制器动作http://www.mypage.de/fake/bla时,我得到一个notFoundExeption。

我的问题是,用户看到我的管理员布局,因为404是在管理布局模板中呈现的。

有没有办法说管理员(或任何前缀)总是受到限制,而未登录的用户会被重定向到登录页面?

我想出的是这个,但我不喜欢它,因为我必须对所有其他前缀做同样的事情。

/**
 * 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);
    }
}

1 个答案:

答案 0 :(得分:1)

你的代码实际上做得很好,但是没有办法自动为每个前缀执行此操作,除非可以在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页面上看到管理员布局。