yii2 rbac phpManager defaultRole在将yii2更新为2.0.21后不工作

yii2 rbac phpManager defaultRole在将yii2更新为2.0.21后不工作,yii2,rules,rbac,Yii2,Rules,Rbac,环境: os:mac mojave php:7.2.9 yii2:2.0.21-基本模板 首先,我的yii2应用程序2.0.5,一切正常。 然后php更新为7.2.9。 但应用程序出错了 致命错误:无法将“对象”用作类名,因为它是保留的 然后yii2更新为2.0.21 然后yii2应用程序正常运行,但所有用户都可以访问所有权限或角色 这是我的RbacController.php 您的问题的第一部分已由@Sfili_81在评论中回答,但您通过更新Yii解决了问题 关于第二部分: 不要在authMa

环境: os:mac mojave php:7.2.9 yii2:2.0.21-基本模板

首先,我的yii2应用程序2.0.5,一切正常。 然后php更新为7.2.9。 但应用程序出错了

致命错误:无法将“对象”用作类名,因为它是保留的

然后yii2更新为2.0.21

然后yii2应用程序正常运行,但所有用户都可以访问所有权限或角色

这是我的RbacController.php


您的问题的第一部分已由@Sfili_81在评论中回答,但您通过更新Yii解决了问题

关于第二部分:

不要在
authManager
的配置中的
defaultRoles
中设置所有角色

如中所述:

默认角色是隐式分配给所有用户的角色

因此,默认情况下,每个用户(包括来宾)都在配置中拥有所有这些角色。
删除此配置选项,并将角色分配给应获取角色的用户(详细操作方法见链接指南部分)。

仅在谷歌上搜索是的,我在谷歌上搜索,我决定更新Yi2以解决我描述的第一个问题,我从ActiveRecord扩展了identityInterface
php类Staff扩展了ActiveRecord实现了identityInterface
问题是所有用户都可以访问所有权限或角色,感谢@Sfili Q 81作为RBAC的替代方案,您可以尝试使用PHP Casbin和Yii中间件:在>中,默认角色是隐式分配给所有用户但受规则限制的角色>默认角色通常与确定角色是否应用于被检查用户的规则相关联。我的应用程序(yii2 2.0.5)在yii2更新到2.0.21之前工作正常
...
'authManager' => [
'class' => 'yii\rbac\PhpManager',
          'supervisor', 'admin', 'staff'],
            'defaultRoles' => ['staff'],
        ],
...
$auth = \Yii::$app->authManager;
        $auth->revokeAll($this->_user->id);
        switch ($this->_user->role) {
            case Staff::ROLE_SUPERUSER :
                if (!Yii::$app->user->can('superuser')){
                    $grantRole = $auth->getRole('superuser');
                    $auth->assign($grantRole, $this->_user->id);
                }
                break;

            case Staff::ROLE_ADMINISTRATOR :
                if (!Yii::$app->user->can('administrator')){
                    $grantRole = $auth->getRole('administrator');
                    $auth->assign($grantRole, $this->_user->id);
                }
                break;
            case Staff::ROLE_STAFF :
                if (!Yii::$app->user->can('staff')){
                    $grantRole = $auth->getRole('staff');
                    $auth->assign($grantRole, $this->_user->id);
                }
                break;
        }