当前位置: 首页 > 知识库问答 >
问题:

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

虞滨海
2023-03-14

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

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

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

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

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

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

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

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

编辑:现在,我处理这个问题的方式是,我有附加的权限“EditOwnIsLocked”,我附加了“IsLocked”规则,它不是“EditOwn”的子级,它是“EDIT”的子级。这是可行的,但它让人感觉肮脏、朴素、简单。

共有1个答案

傅边浩
2023-03-14

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

您可以像我现在做的那个样处理多个规则的需要,通过创建附加权限并将规则附加到它,然后生成子级

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

 类似资料:
  • 问题内容: 我有一项下载文件并保存文件的服务,看来我只能指定一个权限。 要么 我都需要 问题答案: 一个Android 可以具有多个权限,但是权限是在应用程序级别而不是级别上授予的。 您的问题是您试图在文件的错误位置授予您的权限。 的属性指定实体使用服务必须拥有的权限,而不是授予的权限 。 您在您的顶层授予您的应用程序所有组件的权限:

  • 我正在使用firestore构建一个Web应用程序,允许用户在项目上进行合作,并在每个项目中共享文件。我试图设置firebase存储规则来控制用户对每个文件的读取权限,因此只有参与项目的用户才能读取该文件。我将每个有权读取文件的用户的uid写入元数据,因此元数据自定义数据包含值对,如:'user0':uid0、'user1':uid1等。我的问题是如何设置存储规则,只允许元数据中有uid的用户读取

  • 我的Firestore数据库有一些用户和一些s。如果没有其他人认领,用户可以认领。他们通过在上创建一个文档来声明,该文档有一个名为的字段,该字段是对他们自己的用户文档的引用。 我想我已经在这些安全规则中捕捉到了: 但是,当为所有权删除文档时,我获得了: 我是这样做的: 如果我打开read和write设置为true的文档,就不会出现此异常。 我的规则怎么了?他们用模拟器测试正常。

  • 问题是我不能使用具有这些规则的查询,因为(我发现)无法根据子集合是否包含某个文档进行查询。这意味着我不能列出某个用户所属的所有组。我尝试在作为一部分的映射中列出所有用户,但我无法设置谁可以编辑文档的某些部分的权限,因此这也不起作用。 编辑:据我所知,查询必须以某种方式与规则匹配,否则权限将被拒绝。如何创建一个查询来收集某个用户所在的所有组并满足此规则。

  • 我在自学firestore,我想不出一种方法,只允许用户更新、删除或阅读他们添加的集合。 我使用firebase auth进行用户处理。对于每个集合,我将作为保存在数据库中。 这是我的规矩 当我试图读取/获取数据时,我得到错误。 我正在使用firestore的web api(JavaScript)。这是我用来读取数据的代码。

  • 我编写了一些与默认规则完美配合的代码。代码如下: 但如果我用这些规则 我明白了 我做错了什么?