Yii2 auth_rule usage (Yii2 RBAC)



我正在使用Yii2基本模板并处理auth_manager.

我已经在下面的链接中阅读了这个:

Yii2 授权

我也检查过这个

如何在 Yii2 RBAC 中使用auth_rule表?

现在我知道这些事情了:

  1. 如何分配用户角色。

  2. 如何向任何角色分配权限。

  3. 我已经了解3 tables的用法,即auth_assignmentauth_itemauth_item_child

现在我没有得到auth_rule表的用法。

表中有 4 列

name

data

created_at

updated_at

现在我很好奇

  1. 我需要在这些列中存储什么?

  2. 以后如何使用这些数据?

我的意思是只有两列很容易理解,即created_atupdated_at,但namedata列中的内容。

我无法在网上找到任何关于它的信息。 因此,如果有人知道这一点,这对我和那些也在寻找同样东西的人将非常有帮助。

谢谢

我建议阅读以下内容:http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#using-rules

您(可能)不想手动向此表添加数据。name字段将包含规则的名称,这也是auth_item表中的外键。data列将包含实际为规则的类的序列化版本。

因此,在文档中的示例中,有一个作者规则:

namespace apprbac;
use yiirbacRule;
use appmodelsPost;
class AuthorRule extends Rule
{
public $name = 'isAuthor';
public function execute($user, $item, $params)
{
return isset($params['post']) ? $params['post']->createdBy == $user : false;
}
}

身份验证项和规则使用 authManager 组件进行连接:

$auth = Yii::$app->authManager;
// add the rule
$rule = new apprbacAuthorRule;
$auth->add($rule);
// add the "updateOwnPost" permission and associate the rule with it.
$updateOwnPost = $auth->createPermission('updateOwnPost');
$updateOwnPost->description = 'Update own post';
$updateOwnPost->ruleName = $rule->name;
$auth->add($updateOwnPost);
// "updateOwnPost" will be used from "updatePost"
$auth->addChild($updateOwnPost, $updatePost);
// allow "author" to update their own posts
$auth->addChild($author, $updateOwnPost);

使用 DbManager 时,表中的数据会自动填充正确的值。

它是存储对身份验证规则类的引用的地方。 http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#using-rules

PhpManager有 2 个示例,DbManager如果将配置从PHP更改为DB,它将如下所示。

return [
// ...
'components' => [
'authManager' => [
'class' => 'yiirbacDbManager',
// uncomment if you want to cache RBAC items hierarchy
// 'cache' => 'cache',
],
// ...
],
];

DbManager使用四个数据库表来存储其数据:

  • itemTable:用于存储授权项的表。默认为"auth_item"。
  • itemChildTable:用于存储授权项层次结构的表。默认为"auth_item_child"。
  • assignmentTable:用于存储授权项分配的表。默认为"auth_assignment"。
  • ruleTable:用于存储规则的表。默认为"auth_rule"。

您不需要在此处存储任何内容,而是不直接使用它。它在使用您用于PHP manager的相同方法时填充。

最新更新