这是我第一次使用 Yii2 的 RBAC 系统。 我用了http://www.yiiframework.com/doc-2.0/guide-security-authorization.html让自己熟悉主题。 因为我需要对角色/权限进行某种管理,所以我安装了这个扩展:https://github.com/mdmsoft/yii2-admin
我正在开发让用户提交文章的应用程序。有两种用户,管理员和普通用户。
我为此创建了 2 个角色。管理员角色和用户角色。
用户(包括管理员和用户)必须能够编辑文章。管理员应该能够编辑任何文章,而用户只能编辑他们自己的文章。
为此我创建了 2 个权限。 “编辑”权限和“EditOwn”权限。比我创建“IsOwner”规则并将其附加到“EditOwn”权限。
我为 Admin 角色分配了“编辑”权限,为用户角色分配了“EditOwn”权限,一切正常。
现在我想为每篇文章创建“锁定”状态。如果文章被锁定,即使是自己的文章也不能编辑。即使它被锁定,管理员也应该能够对其进行编辑。
为此,我创建了新规则“IsLocked”,但我不知道如何将其添加到“EditOwn”权限。我不知道是否可以将 2 条规则附加到一个权限?
编辑: 现在,我有这种“处理”的方式,我有额外的权限“EditOwnIsLocked”,我附加了“IsLocked”规则,而不是“EditOwn”的子项,“EditOwn”是“编辑”的子项。 这行得通,但感觉很脏,而且简单明了。
最佳答案
事实证明,(目前)没有办法将多个规则附加到一个权限。
您可以按照我现在的方式处理多个规则的需要,方法是创建额外的权限并附加规则,而不是建立子<->父连接,或者您可以编辑规则以检查所有情况(在我的情况是检查 IsParent 和 IsLocked)。
这些解决方案并不完美,但目前是这样。第一个解决方案产生不必要的权限,并使您的权限列表困惑(如果您使用 yii2-admin 或类似的扩展),但保持您的规则干净,第二个解决方案保持您的权限列表干净但让您在多个规则中重新键入相同的代码这是有点反对 OOP 的含义。
关于permissions - Yii2 RBAC 权限可以有多个规则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26759231/