gpt4 book ai didi

yii2 - 我们如何在 Yii2 RBAC 中使用 auth_rule 表?

转载 作者:行者123 更新时间:2023-12-04 02:25:24 26 4
gpt4 key购买 nike

在 Yii 2 RBAC 中,有一个名为 auth_rule 的新表。谁能用一个小例子解释它的用法

create table [auth_rule]
(
[name] varchar(64) not null,
[data] text,
[created_at] integer,
[updated_at] integer,
primary key ([name])
);

最佳答案

yiis RBAC-cconcept 的基本部分保持完全相同。在 Yii1 和 Yii2 中,您都有以下表格:

  • auth_item : 持有实际权限、组、角色等
  • auth_item_child :定义项目的图形/层次结构
  • auth_assignement : 将一个项目分配给用户

  • 在 Yii2 中,您现在有第四个表:
  • auth_rule : 持有可重用的规则来检查是否确实授予了权限

  • 为什么是这样?



    规则背后的概念在 Yii1 中已经存在……至少是这样。在 Yii1 中,您可以在 auth_item 中定义一个“奇怪的规则”。和 auth_assignement . “bizrule”和“data”是这两个表中的列。

    列的内容如下:
  • bizrule : 持有必须返回 bool 值的 php 代码。此代码是在使用 eval() 进行权限检查时执行的.这样,即使用户分配了项目,您也可以控制是否授予权限。示例:这没有任何意义,但是您可以使用此奇怪规则仅在偶数小时授予用户权限:return date('h') % 2 == 0 .
  • data :持有的参数可以在执行时传递给 bizrule。这些数据随后在 bizrule 范围内可用。

  • Yii2

    上述解决方案完美运行,只是 bizrule 的代码不可重用。因此,此功能被提取到其自己的表中。

    如果您查看创建基本 rbac 表 ( yii\rbac\migrations\m140506_102106_rbac_init.php ) 的迁移文件,您可以看到项目表现在与规则表有关系,而不是在其自己的列之一中托管代码。

    但是 auth_assignement之间没有关系和 auth_rule .在 Yii1 中,这允许您立即禁用权限组。由于您可以重用规则并将其附加到所有相关项目,因此不再需要,因此已删除。

    例子

    如果您查看 yii\rbac\DbManager 的实际实现和 yii\rbac\BaseManager一个例子不应该是必要的。有趣的是以下方法:
  • DbManager::addRule() : 序列化并持久化规则实例
  • DbManager::getRule() :在这里您可以看到如何检索、反序列化和返回规则。这意味着规则以序列化格式保存在 auth_rule 的数据列中。 .
  • BaseManager::executeRule() : 上面加载的规则是通过 Rule::execute() 执行的

  • 如果您想添加规则,只需创建一个 yii\rbac\Rule 的实例即可。并调用 DbManager::addRule($rule)以它为参数。这将序列化并保存您的规则,使其可在其他地方重用。惊人的!

    瞧……现在应该很清楚了。如果您有一些悬而未决的问题或想了解更多详细信息,请发表评论。
    干杯,祝你好运!

    关于yii2 - 我们如何在 Yii2 RBAC 中使用 auth_rule 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299205/

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