0

我试图在我的 cakephp-app 中实现一些如此基本的东西,我很惊讶我没有轻易找到解决方案......

我只想为我的应用程序的主导航设置可用链接,具体取决于用户是否登录以及是否登录,具体取决于他的角色(存储在用户表中)。

所以基本上是这样的功能:

if(!$this->request->is('ajax')) {
    if(_user_is_not_logged_in_) {
        $availableNavItems = array('login','help');
        }
    else {
        if($this->Auth->User('role') == 'user') {
            $availableNavItems = array('something','something else','whatever','help','logout');
        }
        elseif($this->Auth->User('role') == 'admin') {
            $availableNavItems = array('something','something else','whatever','admin-tool','user management','help','logout');
        }
    }
    // set available pages for layout
    $this->set('availableNavItems',$availableNavItems);
}

当然,在我的布局中,我会创建一个导航栏,其中包含指向这些可用页面的链接。

我唯一的问题 - 我将把上面的代码放在哪里?我可以在 AppController 中放入 cakephp 在每个请求上调用的回调函数吗?而且,什么是检查我上面写的伪代码“_user_is_not_logged_in_”的好方法?

提前感谢您的帮助!

4

1 回答 1

1
if(_user_is_not_logged_in_) {

可以写成

if(!$this->Auth->user('id')){

您可以将该函数放在 AppController 的 beforeRender 方法中,该方法在每个请求上执行,就在呈现视图之前。

另外值得注意的是 beforeFilter 方法,它在控制器逻辑执行之前被提前调用。在这种情况下,您不需要它,但值得了解。

于 2013-09-24T21:55:56.083 回答