CakePHP自动重定向Admin 404登录



我使用Auth组件和ACL授予角色权限,并在角色没有适当权限时将其重定向到/login。

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

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

是否有一种方法可以说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页面的admin布局。

最新更新