【问题标题】:How to design a user permission handling database? [closed]如何设计用户权限处理数据库? [关闭]
【发布时间】:2018-07-05 14:09:24
【问题描述】:

在我们的一个项目中遇到了一个小问题,其中有两个投资者是建筑师,而且......就像生活中通常的情况一样,他们并没有真正理解其中的一些想法。两人之前的项目经历不同,似乎都看不起对方的想法。是的,我就是其中之一。

我们对如何在我们的一个项目中定义用户权限处理存在争论。

一个想法是让表具有权限、收集权限集的角色以及定义角色的用户。

User
user_id
role_id

Role
role_id
permission_id

Permission
permission_id

另一方想建议使用具有定义权限的列的表来做到这一点:

User
user_id
role_id

Role
role_id
can_do_something
can_do_something_else
can_do_something_even_different

我对第一个选项的看法是维护成本要低得多: 添加单个权限意味着它只是一个插入+代码中权限的处理。

如果是另一种情况(对我来说),这意味着您必须更改数据库,更改处理数据库的代码,然后添加代码来处理权限。

但也许我错了,我没有看到其他解决方案的一些可能的好处。

我一直认为前者是处理它的标准,但我被告知这是主观的,并且在数据库中进行更改只是运行脚本的问题(对我来说这意味着脚本必须添加到部署中,必须在每个数据库上运行,并且在迁移的情况下必须“记住”等)

我知道这个问题可能是基于意见的,但我有点希望,这确实是一个标准和良好做法的问题,而不是主观意见。

【问题讨论】:

  • 你的角色模型是扁平的,还是有排序的层次结构?即,如果我说“Root”,我是否会自动获得“NormalUser”和“AreaManager”的所有权限(这又是“高于”普通用户,因此它也具有 NormalUser 权限?)。或者,角色可以是其他角色的成员,还是只有用户可以与角色关联?用户只有一个角色,还是多个角色?
  • 用户是否会获得一组上下文数据来配合他们的角色? IE。如果我是区域经理,我是否会在某个地方获得区号(以识别我管理的区域,然后我在该区域具有更新权限,但在其他区域具有只读权限?) - 这也可能包括,对于经理,谁向他/她报告,所以我可能有权添加或删除我“下”的用户,但不允许对其他部门的用户进行更新。
  • @p.marino:root 角色必须添加所有必需的权限。角色将不包含指向其他角色的链接。我们不希望与区域相关,它更像是与客户相关。如果您是客户并且您创建了经理,您将为其应用角色。您可以为此创建自己的角色。
  • 根据我的经验,让角色可组合通常更好。 IE。您将角色设计为 HeadLibrarian,然后使其成为角色 Staff、Library Users、Dept.Manager 的成员。为什么?因为当您的图书馆馆长 John Smith 离开公司并由 Susan Black 接替时,您将只需要为她分配一个角色,而不是 3 个(并且您只需删除辞职者的一个角色关联,而不是三)。当然是 YMMV - 我的经验是在拥有数千名员工、数十个角色和数十个部门或数据集的公司中授予权限。
  • 还有一件事:GUI 是否必须查询角色才能决定显示哪些元素或使其可操作? (例如 Role=Manager 将使按钮“FireOnTheSpot”在 GUI 上可见并处于活动状态),而按钮 EditProfle 将对所有人可见但仅在您查看自己的个人资料时才处于活动状态?

标签: database design-patterns architecture


【解决方案1】:

我将其他一些问题作为 cmets 发布到您原来的问题中。

即使您的角色设置完全平淡,我也想不出提出第二个提案的理由。正如您所说,更改某些内容需要修改代码数据结构。

您的同事提出的是一种非规范化,只有在您需要优化处理大量数据的速度时才可以防御。处理角色时通常不是这种情况。

(例如,LDAP 或其他通用单点登录模型采用更接近您的第一个解决方案的方法,因为即使在大型组织中,用户的数量也总是比角色的数量大至少一个数量级)。

即使您正在设计一个 Facebook 替代品(您可能拥有数十亿用户),您确实不太可能需要多个角色,因此这将是过早优化的情况(并且 - 很可能 -更糟糕的是优化错误的部分)。


在更一般的意义上,我强烈建议阅读RBAC Wikipedia article,了解被认为是解决此类问题的标准方法。

【讨论】:

  • 很好的答案,尽管我认为这个问题应该以主要基于意见的方式结束
  • @tomredfern 是的,这就是我一开始担心的问题,但与此同时,我认为……有标准和模式。
  • @Krystian:我曾使用用于 SSO 和管理/访问 WebPortals 的基于角色的模型,主要模型总是更接近第一个解决方案而不是第二个解决方案。
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 2021-12-22
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多