【问题标题】:Can Yii2 RBAC permissions have multiple rules?Yii2 RBAC 权限可以有多条规则吗?
【发布时间】:2015-01-01 18:21:26
【问题描述】:

这是我第一次使用 Yii2 的 RBAC 系统。 我使用http://www.yiiframework.com/doc-2.0/guide-security-authorization.html 来熟悉主题。 因为我需要对角色/权限进行某种管理,所以我安装了这个扩展:https://github.com/mdmsoft/yii2-admin

我正在开发让用户提交文章的应用程序。有两种用户,管理员和普通用户。

我为此创建了 2 个角色。管理员角色和用户角色。

用户(管理员和用户)必须具有编辑文章的能力。管理员应该能够编辑任何文章,而用户只能编辑自己的文章。

为此,我创建了 2 个权限。 “编辑”权限和“EditOwn”权限。比我创建“IsOwner”规则并将其附加到“EditOwn”权限。

我将“编辑”权限分配给管理员角色,将“EditOwn”分配给用户角色,一切正常。

现在我想为每篇文章创建“锁定”状态。如果文章被锁定,即使是他自己的文章,用户也不能编辑它。即使它被锁定,管理员也应该能够对其进行编辑。

为此,我创建了新规则“IsLocked”,但我不知道如何将其添加到“EditOwn”权限。我不知道是否可以将 2 条规则附加到一个权限?

编辑: 现在,我有这个“处理”,因为我有额外的权限“EditOwnIsLocked”,我附加了“IsLocked”规则,它不是“EditOwn”的子级,它是“Edit”的子级。 这行得通,但感觉很脏,很简单,很简单。

【问题讨论】:

  • 在数据库中处理lock不是更好吗?我的意思是一个布尔列,它指示文章是否被锁定?
  • 我确实有。我希望“角色”通过检查数据库来检查文章是否被锁定,而不是拒绝用户并允许管理员。
  • 你的意思,与角色定义无关。您可以检查访问权限,但不能检查文章是否被锁定。您想如何通过角色了解这一点?
  • Err 对不起,上面评论中的错字。不是角色,而是规则。现在我有权限:附加了“EditOwn”和“IsOwner”规则,我想要附加“IsLocked”规则,所以当文章被锁定时用户不能编辑。相同的“规则”(IsLocked)将用于“DeleteOwn”权限,还有一些用于检查独特的东西 + 文章已锁定。

标签: permissions rules yii2 rbac


【解决方案1】:

事实证明,(目前)没有办法将多个规则附加到一个权限。

您可以像我现在做的那样处理对多个规则的需求,通过创建额外的权限并将规则附加到它而不是建立子父连接,或者您可以编辑您的规则以检查所有情况(在我的情况是检查 IsParent 和 IsLocked)。

这些解决方案并不完美,但目前就是这样。第一个解决方案会产生不必要的权限,并使您的权限列表混乱(如果您使用 yii2-admin 或类似的扩展程序),但保持您的规则干净,第二个解决方案保持您的权限列表干净,但让您在多个规则中重新键入相同的代码,即有点与 OOP 的含义相反。

【讨论】:

    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多