Permissions Yii2 RBAC权限可以有多个规则吗?

Permissions Yii2 RBAC权限可以有多个规则吗?,permissions,rules,yii2,rbac,Permissions,Rules,Yii2,Rbac,这是我第一次使用Yii2的RBAC系统。 我过去常常熟悉这个话题。 由于我需要对角色/权限进行某种管理,我安装了以下扩展: 我正在开发一个让用户提交文章的应用程序。有两种用户,管理员和普通用户 为此,我创建了两个角色。管理员角色和用户角色 用户(管理员和用户)必须具有编辑文章的能力。管理员应该能够编辑任何文章,而用户只能编辑自己的文章 为此,我创建了2个权限。“编辑”权限和“编辑自己”权限。然后我创建了“IsOwner”规则并将其附加到“EditOwn”权限 我给管理员角色分配了“编辑”权限,给

这是我第一次使用Yii2的RBAC系统。 我过去常常熟悉这个话题。 由于我需要对角色/权限进行某种管理,我安装了以下扩展:

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

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

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

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

我给管理员角色分配了“编辑”权限,给用户角色分配了“编辑”权限,一切都很好

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

为此,我创建了新规则“IsLocked”,但我不知道如何将其添加到“EditOwn”权限中。我不知道是否有可能在一个许可中附加两条规则

编辑: 现在,我对这个“处理”的方式是,我附加了“IsLocked”规则的额外权限“EditonIsLocked”,它不是“Editonown”的子级,而“Editonown”是“Edit”的子级。 这是可行的,但它让人感觉肮脏、简单、错误。

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

您可以像我现在所做的那样处理多个规则的需要,通过创建附加权限并将规则附加到它,然后建立childparent连接,或者您可以编辑您的规则以检查所有情况(在我的示例中,检查IsParent和IsLocked)


这些解决方案并不完美,但它现在就是这样。第一个解决方案产生了不必要的权限,并使您的权限列表混乱(如果您使用的是yii2 admin或类似的扩展),但保持了规则的整洁,第二种解决方案保持权限列表的整洁,但让您在多个规则中重新键入相同的代码,这有点像OOP所代表的。

在数据库中处理
锁不是更好吗?我的意思是一个布尔列,它指示一个项目是否被锁定?我确实有。我希望“角色”通过检查DB和deny user以及allow to admin来检查文章是否被锁定。你们的意思是,和角色定义无关。您可以检查访问权限,但不能检查项目是否已锁定。你想通过一个角色来了解这一点吗?呃,对不起,上面的评论输入错误。不是角色,而是角色规则。现在我有了权限:“编辑自己”和“IsOwner”规则附加到它,我想要的是附加“IsLocked”规则,所以当文章被锁定时用户不能编辑。相同的“规则”(IsLocked)将用于“DeleteOwn”权限,并且很少有更多的规则将用于检查是否存在唯一+锁定的文章。