gpt4 book ai didi

php - RBAC Yii2 不适用于默认角色

转载 作者:行者123 更新时间:2023-12-03 23:03:01 28 4
gpt4 key购买 nike

我正在关注 Yii 2.0 权威指南。在我的应用程序中,我有两个角色:管理员,可以做任何事情;查看者,可以执行一些未注册用户无法执行的操作。我正在尝试使用 Yii 2 RBAC 的默认角色功能,但它似乎不起作用。我数据库中的用户表有一个名为“角色”的列:对于管理员,它的值设置为 1,对于观众,它的值设置为 2。

我做了什么:

/app/rbac/UserGroupRule.php

namespace app\rbac;

use Yii;
use yii\rbac\Rule;

class UserGroupRule extends Rule {
public $name = 'userGroup';

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 === 'viewer') {
return $group == 1 || $group == 2;
}
}
return false;
}
}

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

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

$author = $auth->createRole('viewer');
$author->ruleName = $rule->name;
$auth->add($viewer);

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

在我的 Controller 中:

public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['admin'],
'rules' => [
[
'allow' => true,
'actions' => ['admin'],
'roles' => ['admin'],
],
],
],
];
}

当我尝试访问“管理员”操作时,它显示 Forbidden #403,即使我是管理员也是如此。如何让它发挥作用?

最佳答案

The user table in my database has a column named "role": for admin it's value set to 1 and for viewers = 2

不幸的是,这不是它的工作原理。用户拥有的权利/角色(默认情况下)是通过 auth_assignment 表完成的。只需在其中添加一个条目:

INSERT INTO `auth_assignment` VALUES ("admin", <user-id>, NOW());

(请务必将用户 ID 更改为您想要设置为管理员的任何用户。

这应该可以解决您的问题。

编辑(因为我误读了您的一些问题):

根据 this link您确实可以定义默认角色,但您还必须确保在配置文件中重新配置您的 authManager 组件以包含默认角色:

'components' => [
'authManager' => [
// ...
'defaultRoles' => ['admin', 'viewer'],
],
],

此角色列表指示始终应为每个用户检查的权限,无论他们是否在 auth_assignment 表中有条目。

关于php - RBAC Yii2 不适用于默认角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28936747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com