在非对象yii2上调用成员函数checkAccess()

时间:2014-12-08 05:24:01

标签: yii2 rbac

我正在关注http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#access-check以实施RBAC。当我使用这个

if (\Yii::$app->user->can('createPost')) {
    // create post
}
SiteController的actionLogin()函数

中的

我收到错误Call to a member function checkAccess() on a non-object yii2

你能找到解决方法吗? 我的RBAC配置是

'authManager' => [
        'class' => 'yii\rbac\PhpManager',
        'itemFile' => '@app/rbac/items.php', 
        'assignmentFile' => '@app/rbac/assignments.php',  
        'ruleFile' => '@app/rbac/rules.php',  

        ],

我正在尝试在站点控制器的

中使用它
public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {



        print_r(\Yii::$app->user->can('createPost'));exit;
}}

2 个答案:

答案 0 :(得分:0)

我认为你不能在那里调用\ Yii :: $ app->用户,因为用户没有登录,因此错误。

您应该事先检查他是否是客人

if (!\Yii::$app->user->isGuest && \Yii::$app->user->can('createPost')) {
    // create post
}

答案 1 :(得分:0)

您应该配置用户组件:

http://www.yiiframework.com/doc-2.0/yii-web-user.html

  

如何对用户进行身份验证的逻辑应该在实现yii \ web \ IdentityInterface的类中完成。您还需要使用此类的名称设置$ identityClass。

     

默认情况下,用户在yii \ web \ Application中配置为应用程序组件。您可以通过Yii :: $ app-> user。

访问该实例      

您可以通过在组件下的应用程序配置中添加一个数组来修改其配置,如下例所示:

'user' => [
    'identityClass' => 'app\models\User', // User must implement the IdentityInterface
    'enableAutoLogin' => true,
    // 'loginUrl' => ['user/login'],
    // ...
]