php - Yii2 - RBAC 控制不工作

标签 php yii2 rbac yii2-basic-app

我正在尝试开发一个 yii2 应用程序,其中成员有两个角色:管理员和成员。因此,我遵循了 yii2 documentation 中描述的默认角色方法。 .我在数据库中有一个名为“member”的表,我用它来登录而不是 User.php 模型。

我的 web.php 配置文件

 'authManager' => [
        'class' => 'yii\rbac\PhpManager',
        'defaultRoles' => ['admin', 'member'],
    ],
 'user' => [
            'identityClass' => 'app\models\Member',
            'enableAutoLogin' => true,
   ],

我在应用程序目录中创建了 rbac 文件夹并添加了 UserGroupRule.php,如下所示:

use Yii;
use yii\rbac\Rule;

/**
 * Checks if user group matches
 */
class UserGroupRule extends Rule
{
    public $name = '';

    public function execute($user, $item, $params)
    {
        if (!Yii::$app->user->isGuest) {
            $group = Yii::$app->user->identity->role;
            if ($item->name === 'admin') {
                return $group == 1;
            } elseif ($item->name === 'member') {
                return $group == 1 || $group == 2;
            }
        }
        return false;
    }
}

$auth = Yii::$app->authManager;

$rule = new \app\rbac\UserGroupRule;
$auth->add($rule);

$member = $auth->createRole('member');
$member->ruleName = $rule->name;
$auth->add($member);
// ... add permissions as children of $author ...

$admin = $auth->createRole('admin');
$admin->ruleName = $rule->name;
$auth->add($admin);
$auth->addChild($admin, $member);

作为测试的一部分,在其中一个 Controller 中添加了这段代码:

'access' => [
     'class' => AccessControl::className(),
      'only' => ['index', 'view', 'create', 'update', 'delete'],
      'rules' => [
            [
                //'actions' => ['admin'],
                'allow' => true,
                'roles' => ['admin'],
            ],
        ], 
 ],

问题是,即使我尝试以管理员身份访问其中一个操作(即索引),它也会给我禁止 (#403) 错误。那么,我错过了什么?请帮忙!

附言如前所述,我正在使用 db 进行登录。如果你愿意,看看member.php模型。

最佳答案

我找到了答案。它终于奏效了! 缓存好像有什么东西。重启浏览器和PC后,就可以了。

关于php - Yii2 - RBAC 控制不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154674/

相关文章:

c# - 从 PHP 最快访问密集型函数?

gridview - Yii GridView 小部件 - 居中对齐分页

php - Yii2 自定义小部件 Assets 未注册

php - Yii accessRules 表达式不起作用

kubernetes - RBAC:具有多个命名空间的角色

azure - 如何拒绝订阅级别贡献者角色对 azure 中特定资源组的访问

php - 从两个不同的php文件扩展html表

php - 为什么 Doctrine SQLite 会忽略身份验证配置?

php - Yii 无法保存数据 - 未知方法 save()

php - Yii2模块未配置! - 选项 : configFile are required error - codeception