2014-12-08 133 views
1

我正在关注http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#access-check来实现RBAC。当我使用这个调用一个非对象的成员函数checkAccess()yii2

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; 
}} 
+0

你配置你的用户组件? – soju 2014-12-08 07:41:11

+0

如何?我不确定 – user7282 2014-12-08 07:42:18

回答

0

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

你应该事先检查,如果他是一个客人

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

我仍然有相同的错误 – user7282 2014-12-08 07:27:33

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'], 
    // ... 
] 
+0

用户组件只是这样配置的 – user7282 2014-12-08 08:21:23

相关问题