(自定义软件)每个应用程序使用用户组时每条记录的安全规则

信息安全 应用安全 访问控制 rbac
2021-09-05 14:53:25

我在这里使用自定义软件,所以不要担心微软,打开任何东西或其他东西。让我们坚持应该如何结合的理论。

假设我有一个用户系统/数据库。

该数据库有一个用户表,以及他们相关的用户组(管理员、IT 支持、经理、秘书、客户、来宾)。这些不是层次结构,而是组的成员资格。例如,如果需要,Alice 可以是管理员和客户。

应用程序的权限分配给组,在多组分配给用户的情况下,权限形成简单的二进制 OR 权限(即 Admin 拥有 X,Guest 拥有 Y,然后用户获得 X 和 Y )。

应用程序是在应用程序中做事的一种方式,它们禁止访问或允许访问。例如,您可以访问“StackExchange”,但只能阅读 - 或者您可以访问帖子或版主工具等...

回顾一下,用户获得了管理他们可以访问哪些权限的组。

我遇到问题的概念是将特定记录锁定到用户组,尤其是当我们跨多个应用程序工作时。因此,例如,只有管理员组可以查看“StackExchange”应用程序中的一些帖子。

我不想为每条记录添加权限,也不想通过微小的更改来制作冗余的应用程序代码。

你会如何处理这个问题?

3个回答

除了 ACL,另一种常见的方法是使用规则。因此,您不是在每个记录级别上定义权限,而是基于记录的特征。

BaseRight :阅读帖子

规则:x 点赞的帖子、当前用户创建的帖子、所有帖子

这些规则由名称和一些程序逻辑组成。它们可以非常灵活,例如 SQL 查询的片段。在我在工作中开发的软件中,即使是管理员也可以定义新规则。

实际权限现在是基本权限和规则与可选参数的组合。

我建议默认为无访问权限并避免负面权限,因为它使实现更容易,因此减少错误修剪:您可以简单地迭代所有规则,只要一条规则说“好的”,您就完成了。由于显而易见的原因,在 SQL 中执行此操作时必须特别小心,但是对于具有大量结果集的查询的性能改进可能是值得的。

例子

例如,匿名用户伪角色可能会获得以下权利:

:阅读基于以下内容的高质量帖子

  • BaseRight:阅读帖子
  • 规则:x 点赞的帖子
  • 参数:x=3

站点管理员会正确处理:

阅读所有基于

  • BaseRight:阅读帖子
  • 规则:所有帖子

听起来您希望某些记录仅限于某些组,而某些(大多数?)记录不受限制。

由于不受限制的另一种说法是“每个人都可以访问”,因此听起来您需要添加一个名为“每个人”的组的概念,系统的所有用户都属于该组。

然后,您可以显式或隐式地允许“所有人”组可以访问不受限制的记录。

我不确定每个资源权限表是否有任何解决方法。

  1. 拥有一个由资源 id 索引的资源表。
  2. 有一个由角色 id 索引的角色表。
  3. 有一个由用户 ID 索引的用户表。
  4. 有一个引用上述键的权限表。

它增加了一些开销,但使用正确的数据类型,即使使用大型数据集也应该可以快速查询。