Many to many 如何在具有权限传输的关系数据库中建模用户-用户组?

Many to many 如何在具有权限传输的关系数据库中建模用户-用户组?,many-to-many,relational-database,acl,rdbms,foreign-key-relationship,Many To Many,Relational Database,Acl,Rdbms,Foreign Key Relationship,我在设计简单的ACL系统时遇到以下问题: 来自团队A的人员1可以编辑项目X Person 1从团队A转移到团队B 团队B无法编辑项目X 由于历史原因,我们仍然允许人员1编辑项目X 以下是RDBMS中的典型模型: Person表与表Team 有一个ACL表,如下所示: 对象类型|对象id |项目类型|项目id |拒绝或允许 像我描述的那样处理团队间的调动 我是否应该为人员1添加额外的规则 如果有一天我们拒绝整个团队A(包括前成员)编辑ItemX,会发生什么 我们是否也应该保留一张人员调动

我在设计简单的ACL系统时遇到以下问题:

  • 来自
    团队A的
    人员1
    可以编辑
    项目X
  • Person 1
    团队A
    转移到
    团队B
  • 团队B
    无法编辑
    项目X
  • 由于历史原因,我们仍然允许
    人员1
    编辑
    项目X
以下是RDBMS中的典型模型:

  • Person
    表与表
    Team
  • 有一个ACL表,如下所示:
    对象类型|对象id |项目类型|项目id |拒绝或允许
像我描述的那样处理团队间的调动

  • 我是否应该为
    人员1
    添加额外的规则
  • 如果有一天我们拒绝整个
    团队A
    (包括前成员)编辑
    ItemX
    ,会发生什么
  • 我们是否也应该保留一张人员调动历史记录表
  • 所以要决定ACL规则,我们必须遍历大量的东西,也许我甚至错过了一些

这个问题的复杂性随着ACL和人员转移的不断发生而增加。在关系数据库中为此设计模型的最佳实践是什么?这类事情是否有一个通用术语或主题?

典型的表驱动安全性使用一种模式


如果要保留已离开角色的人员的访问权限,则需要在角色成员和角色权限上添加生效日期和到期日期/时间。这将允许您在“项目X”存在之前说“人员2”离开了“团队A”,这样他们就看不到了。

有什么理由不添加一个名为“前团队A”的组吗,当他们从团队A过渡到另一个团队时,是否会向团队中添加人员?@SteveJorgensen假设另一个
人员2
可能在
项目X
存在之前加入并离开
团队A
。这可能会让无关人员触摸
项目X
?我想做的是模仿现实世界中特权的工作方式。如果您参与了
项目X
,您将始终参与其中,除非您的旧团队一起被拒绝。