【问题标题】:User permissions database design using PostgreSQL's inheritance使用PostgreSQL的继承设计用户权限数据库
【发布时间】:2016-07-17 19:49:06
【问题描述】:

我的任务是使用 PostgreSQL 创建数据库。我必须通过继承来实现用户权限。我对如何做到这一点没有明确的愿景。假设我有 3 个用户角色:管理员版主注册用户。我在想的是有一个 users 表,该表将保存有关用户本人的标准数据(名字、姓氏、电子邮件、密码......)。表 users 将有一个 FK 到一个用户所属的组(版主、管理员或注册用户)的表,所以我知道要查询哪个表来获得权限.

由于administratormoderator拥有注册用户的权限,我认为administratormoderator 表将继承 注册用户 的权限并添加他们自己的特定权限。这些表只是为了它们与任何其他表没有关系的权限而存在。

稍后我会查询 user_group 表以查看用户属于哪个组,然后查询正确的表以获取权限(其类型为布尔值)。

但是通过这种方法,我看不到限制特定用户的特定权限的方法(例如发布 cmets)。我将不得不限制整个组的权限。

任何关于最佳方式的建议将不胜感激。

【问题讨论】:

    标签: database postgresql inheritance database-design permissions


    【解决方案1】:

    典型的基于 ACL 的安全架构听起来与您描述的非常相似。一个用户可以有一个或多个角色,一个角色可以有权限(一个角色看起来和你的组一样)。

    您的问题的答案很大程度上取决于您需要的粒度级别(在我从事的项目中,我们需要对上述经典示例进行额外的级别)。正如我看到你的例子,你有两个选择:

    1. 将权限直接分配给用户。似乎并非如此,因为您还需要角色(管理员、版主)等。如果角色有权发布 cmets,通常您不希望将其限制为少数用户(如果您想对更多用户执行此操作可能比其他角色的情况)

    2. 如果你需要这个,也许异常机制可以工作。一个用户有一个角色,但是可以有一个单独的表来存储异常,即使他有一定的角色也不允许他的权限

    【讨论】:

    • Tnqu :) 选项号 2 似乎是正确的选择...发布问题后,我有一个想法,我可以让每个表继承用户表并将用户存储在那里,但很快意识到我必须迁移有关用户的数据,以防我想更改他所属的角色
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 2012-02-06
    • 2021-01-26
    • 1970-01-01
    • 2010-11-19
    • 2014-11-22
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多