我正在尝试在我的cakephp-app中实现一些基本的东西,我很惊讶我没有轻易找到它的解决方案......
我想要做的是为我的应用程序主导航设置可用链接,具体取决于用户是否登录,如果是,则取决于他的角色(存储在users-table中)。
所以基本上是这样的函数:
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_”的好方法是什么?
提前感谢您的帮助!
答案 0 :(得分:1)
if(_user_is_not_logged_in_) {
可以写成
if(!$this->Auth->user('id')){
您可以将该函数放在AppController的beforeRender方法中,该方法在每次请求时执行,就在呈现视图之前。
另外值得注意的是beforeFilter方法,它在控制器逻辑执行之前被提前调用。在这种情况下你不应该需要它,但值得了解。