这是我第一次使用Yii2的RBAC系统。 我使用http://www.yiiframework.com/doc-2.0/guide-security-authorization.html让自己熟悉主题。 由于我需要某种角色/权限管理,我安装了此扩展程序:https://github.com/mdmsoft/yii2-admin
我正致力于让用户提交文章的应用程序。有两种用户,管理员和普通用户。
我为此目的创建了2个角色。管理员角色和用户角色。
用户(管理员和用户)必须具备编辑文章的能力。管理员应该能够编辑任何文章,而用户只能编辑他们自己的文章。
为此我创建了2个权限。 "编辑"许可和" EditOwn"允许。比我创造的" IsOwner"规则并将其附加到" EditOwn"允许。
我分配了#34;编辑" Admin角色的权限," EditOwn"用户角色,一切都很好。
现在我想创建"锁定"每篇文章的状态。如果文章被锁定,即使用户自己的文章,用户也无法对其进行编辑。管理员应该能够编辑它,即使它已被锁定。
为此我创建了新规则" IsLocked"但我不知道如何将它添加到" EditOwn"允许。我不知道是否有可能在一项许可中附加2条规则?
编辑: 现在,我有这个"处理"在我有额外许可的方式" EditOwnIsLocked"我附加了" IsLocked"比#34; EditOwn"的孩子的规则,它是"编辑"的孩子。 这有效,但它感觉很脏,简单而且简单错误。
答案 0 :(得分:3)
事实证明,(目前)没有办法将多个规则附加到权限。
您现在可以通过创建额外的权限并附加规则来处理多个规则的需要,而不是制作子< - >父连接,或者您可以编辑规则以检查所有情况(在我的情况下,检查IsParent和IsLocked)。
这些解决方案并不完美,但它现在正是如此。第一个解决方案会产生不必要的权限,并使您的权限列表混乱(如果您使用的是yii2-admin或类似的扩展名),但保持规则清洁,第二个解决方案会保持您的权限列表清洁,但会让您在多个规则中重新键入相同的代码,这是OOP代表的是什么。