我有一个“帖子”和一个“用户”控制器。我使用Auth组件,我希望所有用户都可以访问“Post.index”,但只有登录用户才能访问“User.index”。
在我的app_controller.php中我有这个
$this->Auth->allow('signup', 'confirm', 'index');
但是所有用户都可以访问post.index和user.index。如何在allow-method中指定Controller?
这对我不起作用:
$this->Auth->allow('signup', 'confirm', 'Post.index');
更新 我从app_controller.php中删除了'index',而是将其设置在post控制器的beforeFilter方法中:
function beforeFilter()
{
parent::beforeFilter();
$this->Auth->allow('index');
}
我还在app_controller中设置了一个变量“loggedIn”,而没有调用“parent :: beforeFilter();”我收到了一个“未定义的变量”通知。
thx sibidiba
答案 0 :(得分:13)
期限不起作用。你可以试试'/'。如果失败,您应该分别在PostController和UserController的$this->Auth->allow('index')
中设置::beforeFilter()
。不要忘记调用parent :: beforeFilter()。
答案 1 :(得分:2)
取决于您正在处理的版本。如果是cakephp 2.x,请将此代码放入控制器中,该控制器具有您希望无需登录即可访问的操作。作为您的问题,您应该将此代码添加到帖子控制器:
function beforeFilter(){
$this->Auth->allow(array('index','another action'));}
allow(array('acction you want to allow'))
代替allow('acction you want to allow')
答案 2 :(得分:1)
我正在使用CakePHP 2.x.斜杠技巧不起作用。
如果你想在没有登录的情况下允许用户访问“myController.myAction”,你应该将beforeFilter()添加到myController.php而不是AppController.php
以下是要添加到myController.php中的代码:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('myAction');
}
答案 3 :(得分:1)
对于Cakephp 2.x,有几种方法(取决于cakephp版本)。
来自文档(http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html):
// Allow all actions. CakePHP 2.0
$this->Auth->allow('*');
// Allow all actions. CakePHP 2.1
$this->Auth->allow();
// Allow only the view and index actions.
$this->Auth->allow('view', 'index');
// Allow only the view and index actions.
$this->Auth->allow(array('view', 'index'));
答案 4 :(得分:1)
CakePHP开发人员常见的问题是授权特定控制器的特定操作
https://blog.sohelrana.me/cakephp-auth-allow-specific-actions-specific-controllers/
答案 5 :(得分:1)
在cake 3.x中,您可以使用以下代码行来允许所有操作。
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow();
}
答案 6 :(得分:0)
$ this-> name返回当前的Controller请求。
在AppController :: beforeFilter()
中尝试此操作public function beforeFilter()
{
// ... Basic configs
switch ($this->name) {
case 'Posts':
$this->Auth->allow('add');
break;
case 'Test':
$this->Auth->allow('test');
break;
}
}
抱歉,我的英语不好
答案 7 :(得分:0)
对于 CakePHP 3。* ,可以在特定控制器
中允许特定方法//put this line after namespace
use Cake\Event\Event;
// in your specific controller call this function to allow specific methods
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow(['index','view']); //<-- here you put your methods
}