将复杂的用户权限关联到一个表



我有以下表格结构:

Entity
---------------------
id | name
Users
---------------------
id | name | password 
UserGroups
---------------------
id | parent_id | name
Users_UserGroups
---------------------
user_id | user_group_id
Roles
---------------------
id | parent_id | name
Users_Roles
--------------------
user_id | role_id

主要目标是创建具有以下条件的Entity行级访问限制:

1) 用户创建Entity-他可以查看(他是所有者)
2)用户组成员也可以查看(但如果定义为其他-不查看-它将是用户专用的)。所以记录可以是用户或组私有的,也可以是公共的——所有人都可以看到记录。例如,用户在销售团队A中,有一些记录可以看到所有组成员,但也可以有一个或多个记录只能看到用户——可能是潜在客户
3)例如,用户A处于角色salesman中,而此角色是父角色sales managers的子角色。然后,作为sales manager角色的用户可以看到用户A实体。角色的层次结构。老板可以看到他的直接员工在做什么:)
4)也将有profile表,可以在其中将配置文件添加到角色,如果需要,也可以添加到用户。

主要问题是如何将用户/组/角色/配置文件与实体联系起来?如何定义权限?我的想法是在Entity中创建列"user_id"。当查询Entity记录时,找到用户,然后看到哪个角色、组、配置文件是用户等等。但我认为这太复杂了,也许有更简单的方法,没有很多额外的表。我将感谢你的建议:)

标准模式是将Principal定义为任何可以分配权限的对象。然后,用户、用户组和角色都是Principal的示例。一种实现方式是使用principal_id作为主键的主体表,然后通过user_id将用户表与之关联,通过role_id将角色表与之相关,通过user_group_id将组表与之相关联。

然后,您将在entity上有一个entity_owner_principal_id列,以及一个具有entity_id,principal_id的entity_permissions表。您可以向该表中添加诸如"读取"、"删除"、"更新"之类的列,或者使用更灵活的列。

您可能还想考虑组和角色之间是否有任何真正的区别,它们都是对用户进行分组的方式,而且两者似乎都有层次结构。

最新更新