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

对非对象yii2调用成员函数checkAccess(),yii2,rbac,Yii2,Rbac,我下面介绍如何实现RBAC。当我用这个的时候 if (\Yii::$app->user->can('createPost')) { // create post } 在SiteController的actionLogin()函数中 我在非对象yii2上调用成员函数checkAccess()时出错 你能找出解决办法吗? 我的RBAC配置是 'authManager' => [ 'class' => 'yii\rbac\PhpManager',

我下面介绍如何实现RBAC。当我用这个的时候

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

我在非对象yii2上调用成员函数checkAccess()时出错

你能找出解决办法吗? 我的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;
}}

我认为您不能在那里调用\Yii::$app->user,因为该用户未登录,因此出现错误

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

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

您应该配置您的用户组件:

如何验证用户的逻辑应该在实现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'],
    // ...
]