【问题标题】:Database Schema Design For Company vs Account Level Access公司与帐户级别访问的数据库架构设计
【发布时间】:2018-03-15 03:11:19
【问题描述】:

我正在开发一个具有一些基于角色的基本访问控制的应用程序。我在这里制作了当前设计的清晰图表:https://www.lucidchart.com/invitations/accept/49ba4012-c2cc-48de-b11b-5d9c357a66d7

目前的主要对象是帐户、公司和用户,其中一个用户可以是许多公司的成员,并且 1 个帐户下有许多公司。例如,我可以注册并创建一个“Bob's Tyre Shop”帐户,并且我可以在其下拥有多个公司,例如“Bob's Tyre Shop in New York”和“Bob's Tire Shop in Chicago”等。

我希望用户能够成为多家公司的一员,因此如果乔是两家商店的机械师,他应该能够访问他所在的各个商店的信息。我可以用我当前的数据库设计来做到这一点,但我被困在如何向用户授予帐户级别权限上。例如,当 Bob 创建帐户时,他是帐户“所有者”,因此他应该能够自动执行所有公司的管理操作。我还应该能够拥有其他可以访问所有公司的“帐户管理员”。或者,如果我想授予用户对帐户的“计费”访问权限,他应该只能看到计费信息,而不必是各个公司的成员。

是否像使用 account_roles 表在帐户和用户之间创建一个 account_users 连接表一样简单?还是我错过了其他东西。任何帮助将不胜感激。

【问题讨论】:

  • 链接不再有效。可以更新吗?

标签: sql postgresql roles access-control user-accounts


【解决方案1】:

我认为您可以创建与帐户相关的成员资格表的另一个版本。

此membership_accounts 表将存储帐户和用户之间的关系,并捕获级别(帐户ID、用户ID、级别)。它与成员资格表基本相同,但与帐户相关。

此表中的级别列将是memberships_levels 表的外键。

然后,要了解用户的完整权限集,您可以获得memberships 和membership_accounts 表的UNION ALL,并对其进行检查。

【讨论】:

  • 是的,有时用户可能只需要对少数公司的管理员访问权限。在那种情况下,我想我会为每个需要访问的公司创建一个“会员资格”行(来自我发布的清晰图表链接)。这看起来合适吗?编辑:我根据您的建议更新了清晰图表
  • 会员资格是否决定了用户可以访问什么级别?如果是这样,我认为表格设计可以简化,我会更新我的答案。
  • 是的,公司的会员资格决定了您可以做什么。公司中有可以上传文档的记者,有可以上传/编辑文档的公司内部的协作者,以及可以上传/编辑以及添加/删除/编辑公司中的用户的公司中的管理员。然后在帐户级别,应该有一个管理员,该管理员对帐户中的所有公司具有管理员访问权限,一个帐单角色可以登录并查看帐单信息。
  • 太好了,我想我明白了。我已经更新了答案,这有意义吗?
  • 或者您是否正在考虑更多类似 SELECT 'Account' as type, user_id, account_id as id FROM members_accounts UNION ALL SELECT 'Company', user_id, company_id FROM members。这样,“type”列将指定它是什么类型的成员资格,而通用“id”列将引用 account_id 或 compnay_id?
猜你喜欢
  • 2012-08-11
  • 2012-05-22
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多