【发布时间】:2013-07-15 11:47:09
【问题描述】:
我创建了一个名为“IssueTracker”的插件,它位于app/Plugin/IssueTracker。我创建了一个名为Tickets 的控制器,可以通过www.example.com/issue_tracker/tickets/ 访问它。但是,仅适用于具有“管理员”等级的登录用户。
这并不是我所希望的,所以我在Plugin/IssueTracker/Controller/TicketsController.php 中添加了以下内容:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index');
}
我希望通过这段代码(我在我的app/Controller/ 中的其他几个控制器中使用它,它将从我的AppController.php 文件继承。TicketsController.php 文件扩展了IssueTrackerAppController(像这样):
class TicketsController extends IssueTrackerAppController {
//functions goes in here
}
在我的Plugin/Controller 文件夹中,我创建了文件IssueTrackerAppController,它扩展了AppController。
在我的AppController.php 文件中,我已经定义'index' 和'view' 是公共操作。但是,由于某种原因,它在我的插件中不起作用。
有什么需要我监督的吗?当我以未登录用户(访客)身份访问www.example.com/issue_tracker/tickets 时,它告诉我需要登录。如果我以用户而非管理员身份登录,Auth 组件将不允许我进入并显示登录表单。
应该有办法让Auth 在插件中工作,对吧?
编辑
下面是AppController.phpsn-p,我在其中配置了身份验证:
public $components = array(
'Auth' => array(
'loginAction' => array('controller' => 'users', 'action' => 'login', 'plugin' => false),
'loginRedirect' => array('plugin' => false, 'controller' => 'ervaringen', 'action' => 'add'),
'logoutRedirect' => array('plugin' => false, 'controller' => 'ervaringen', 'action' => 'index'),
'authorize' => array('controller'),
'flash' => array(
'element' => 'error',
'key' => 'auth',
'params' => array(
'heading' => 'Waarschuwing!')
),
'authError' => 'Je moet inloggen om deze inhoud te bekijken.',
),
'Session',
'DebugKit.Toolbar'
);
【问题讨论】:
-
您的
IssueTrackerAppController文件中有 beforeFilter 函数吗?如果是这样,您必须在其中添加另一个parent::beforeFilter();调用 -
是的,有。忘了提,但是那个人也打电话给
parent::beforeFilter();。 -
你能用 beforeFilter 覆盖组件设置吗?
-
我不明白你的评论。是“试试这个”还是“你能做到”?
标签: cakephp authentication plugins cakephp-2.3