Auth无法正常工作

时间:2014-10-26 18:24:28

标签: php cakephp

我试图让某些按钮仅显示给某些用户类型,我在视图中的按钮周围添加了此代码:

<li><?php
        if($this->Auth->user('role_id')==8){
                echo $this->Html->link(__('New Consumer Product'), array('action' => 'add'));
        }
    ?>
</li>

但是这只是给了我错误Error: AuthHelper could not be found.所以我在AppController中添加了以下内容:

public $helpers = array('Auth');

然而,这只是给了我以下错误:

Helper class AuthHelper could not be found.
Error: An Internal Error Has Occurred.

这里发生了什么?当我将Auth帮助器添加到AppController中时,它是否有用?

我以前一直在我的UsersController中使用Auth而没有任何问题。

4 个答案:

答案 0 :(得分:2)

您无法在视图中使用Auth。这只适用于控制器。

实际上有一些选项,比如为它设置/传递变量,但按照the manual

这是正确的方法
    if((AuthComponent::user('role_id') == 8) {
        ...
    }

答案 1 :(得分:1)

在AppControllers beforeRender()beforeFilter()中,只需将活动用户设置为视图:

public function beforeRender() {
    $this->set('userData', $this->Auth->user());
}

在视图中使用该变量。我更喜欢不对视图中的组件使用静态方法调用,它是组件的错误位置,而且由于紧耦合,静态调用也不是你想要引入的东西。

我的BzUtils plugin附带了一个可以处理这个变量的帮助器,或者可以配置为从会话中读取用户数据并提供一些方便的方法。

答案 2 :(得分:1)

in cake 3.x我发现唯一有用的是在AppController.php中设置变量:

public function beforeRender(\Cake\Event\Event $event) {
     $this->set(['userData'=> $this->Auth->user(),
     ]);
}

关键区别在于您必须传递$ event ...

答案 3 :(得分:-3)

Auth是一个组件而不是帮助器。没有Auth助手。

您可以从以下命令

中读取Authenticated用户
$user = $this->Session->read("Auth.User");