CakePHP 2-问题允许控制器';s动作

CakePHP 2-问题允许控制器';s动作,cakephp,permissions,cakephp-2.0,Cakephp,Permissions,Cakephp 2.0,这就是我的情况: 我在mi PluginAppController中有一个lang函数,它可以更改语言环境语言,并重定向到referer页面 我有一个flag的图像菜单,用户可以在上面做clic来改变语言 然后,因为我有一个身份验证系统,所以我希望只允许用户运行这个操作(“lang”) 问题是,我的系统接收URL,但它是referer URL,因为在lang操作结束时,我重定向到referer,所以我不能允许或拒绝此操作 我的语言操作代码: public function lang($lang

这就是我的情况:

我在mi PluginAppController中有一个lang函数,它可以更改语言环境语言,并重定向到referer页面

我有一个flag的图像菜单,用户可以在上面做clic来改变语言

然后,因为我有一个身份验证系统,所以我希望只允许用户运行这个操作(“lang”)

问题是,我的系统接收URL,但它是referer URL,因为在lang操作结束时,我重定向到referer,所以我不能允许或拒绝此操作

我的语言操作代码:

public function lang($lang = 'spa'){
  $this->Session->write('Config.language', $lang);
  $this->redirect($this->referer());
}

是否允许访问名为“lang”的操作? 然后将其放入beforeFilter(AppController,而不是插件的AppController)

当然,这是假设你的应用程序中没有其他同名的操作,在这种情况下,你需要检查请求并确定它是否来自你的插件

if ($this->request->params['plugin'] == 'yourPlugin' && $this->request->params['controller'] == 'controllerOfYourPlugin') {
   $this->Auth->allow('lang');
}

您可以在另一个区域或使用另一种方法允许或拒绝。此操作不应控制允许/拒绝访问其他所有操作。@GuillermoMansilla但在我的AppController的beforeFilter操作中,我调用了一个检查权限的cuestom组件,因此在“$This->Auth->allow('lang')”之后,URL被禁止,显示下一条通用消息:“您没有自动登录到此位置”。我不明白的是为什么显示此消息,因为此消息属于Auth组件
if ($this->request->params['plugin'] == 'yourPlugin' && $this->request->params['controller'] == 'controllerOfYourPlugin') {
   $this->Auth->allow('lang');
}