Database 跨4个表的多对多关系
我正在实现一个基于角色的访问控制系统,它有以下数据库表Database 跨4个表的多对多关系,database,database-design,database-schema,Database,Database Design,Database Schema,我正在实现一个基于角色的访问控制系统,它有以下数据库表 groups --------- id (PK) name level resources --------- id (PK) name roles --------- id (PK) name permissions ----------- id (PK) name description users ----------- id (PK) name group_id(FK - references id on groups)
groups
---------
id (PK)
name
level
resources
---------
id (PK)
name
roles
---------
id (PK)
name
permissions
-----------
id (PK)
name
description
users
-----------
id (PK)
name
group_id(FK - references id on groups)
role_id(FK - references id on roles)
组与资源和角色之间存在多对多关系。所以我有下面的连接表
group_resource
---------------
group_id(FK - references id on groups)
resource_id(FK - references id on resources)
group_role
---------------
group_id(FK - references id on groups)
role_id(FK - references id on roles)
问题是:
组中的任何给定角色都应仅对分配给该组的资源具有权限
我不完全确定在组资源和组角色关系的上下文中,对角色、权限和资源之间的关系建模的最佳方式是什么
如有任何建议,将不胜感激
谢谢。这里有一个可能的解决方案,有一定程度的冗余
groups (id (PK), name, level)
roles (group_id (FK for groups) ,num_role, name) with PK (group_id, num_role)
users (id (PK), name, group_id, num_role) with (group_id, num_role) FK for roles
resource_types (id (PK), name)
group_resources (resource_type_id (FK for resource_types), group_id (FK for groups) with PK both the attributes
permissions (resource_type_id (FK for resource_types), group_id, num_role, description) with (group_id, num_role) FK for roles
使用此解决方案,应用程序必须在插入权限期间检查资源是否出现在权限中指定的组id中,通常带有触发器
消除冗余的一种方法是消除关系组资源,因为所有信息都可以通过权限找到。-group-GRP存在。
-
组{GRP}
PK{GRP}
-角色ROL存在。
-
角色{ROL}
PK{ROL}
-资源RES存在。
-
资源{RES}
PK{RES}
-角色ROL存在于组GRP中。
-
组_角色{GRP,ROL}
PK{GRP,ROL}
FK1{ROL}引用角色{ROL}
FK2{GRP}引用组{GRP}
-为GRP组分配了资源资源。
-
组资源{GRP,RES}
PK{GRP,RES}
FK1{GRP}引用组{GRP}
FK2{RES}引用资源{RES}
-每个用户的权限已存在。
-
权限{PER}
PK{PER}
-每个角色的权限被授予角色ROL
-资源资源的组GRP中。
-
组资源权限{GRP,RES,ROL,PER}
PK{GRP,RES,ROL}
FK1{GRP,RES}引用组_资源{GRP,RES}
FK2{GRP,ROL}引用组_角色{GRP,ROL}
FK3{PER}引用权限{PER}
-用户USR在GRP组中被分配角色ROL。
-
用户{USR,GRP,ROL}
PK{USR}
FK1{ROL}引用角色{ROL}
FK2{GRP}引用组{GRP}
-集团GRP角色ROL中的用户USR,
-对资源RES具有权限。
-
创建视图用户\u资源\u权限
像
选择u.USR
,x.RES
,x.PER
,u.GRP
,u.ROL
从用户作为u
加入组\u资源\u权限为x ON x.GRP=u.GRP
x.ROL=u.ROL;
注:
所有属性列不为空
PK=主键
AK=备用密钥唯一
SK=正确的超键唯一
FK=外键
权限是否与其他实体存在某种关系?角色和用户组之间的关系是什么(如果有的话)?该角色必须与团队建立关系?是否?权限应该与组中的资源和角色有关系。例如,属于集团“总部”的用户“Joe Bloggs”被分配一个名为“审计员”的角色。“总部”集团拥有“审计文件”和“年度报告”资源。集团“总部”中的“审计员”角色对资源“审计文件”具有“读取”和“更新”权限,对资源“年度报告”仅具有“读取”权限。因此,“总部”中的“审计师”和另一个办事处中的“审计师”是两个不同的角色,或者是同一个角色?它们是两个不同的角色。这意味着角色和组之间的关系不是多对多而是一对多。我会试着提出一个答案。