角色权限和用户角色,正确映射?
Roles permissions and user roles, proper mapping?
我有一个基本的基于角色的访问控制。单个 table 用于权限(名称、描述),单个 table 用于角色(名称、描述)。问题是,如何与用户进行正确的映射?所以我想到了 1 个解决方案:
role_permission_set - table
(role_permission_id PK, role_id (多对一), permission_id (多对一))
user_role - table
(user_role_id PK, user_id (多对一), role_permission_id (多对一))
两个 table 用于映射角色权限和用户角色。有更好的方法吗?
你有这个权利。
分解成两个独立的多对多关系。一个在 user
和 role
之间。另一个在role
和permission
之间。
这两个多对多关系中的每一个都需要一个类似于您所描述的连接table。
我在您的 post 中看到的唯一错误是 user_role
应该包含 role_id
而不是 role_permission_id
。
create table user_role (
user_role_id int serial primary key,
user_id int not null references user(user_id),
role_id int not null references role(role_id),
constraint uq_user_role unique(user_id, role_id)
);
当您想获取 user
的 permission
值列表时:
select distinct p.name
from user_role ur
join role_permission rp on rp.role_id = ur.role_id
join permission p on p.permission_id = rp.permission_id
where ur.user_id = 123;
我有一个基本的基于角色的访问控制。单个 table 用于权限(名称、描述),单个 table 用于角色(名称、描述)。问题是,如何与用户进行正确的映射?所以我想到了 1 个解决方案:
role_permission_set - table
(role_permission_id PK, role_id (多对一), permission_id (多对一))
user_role - table
(user_role_id PK, user_id (多对一), role_permission_id (多对一))
两个 table 用于映射角色权限和用户角色。有更好的方法吗?
你有这个权利。
分解成两个独立的多对多关系。一个在 user
和 role
之间。另一个在role
和permission
之间。
这两个多对多关系中的每一个都需要一个类似于您所描述的连接table。
我在您的 post 中看到的唯一错误是 user_role
应该包含 role_id
而不是 role_permission_id
。
create table user_role (
user_role_id int serial primary key,
user_id int not null references user(user_id),
role_id int not null references role(role_id),
constraint uq_user_role unique(user_id, role_id)
);
当您想获取 user
的 permission
值列表时:
select distinct p.name
from user_role ur
join role_permission rp on rp.role_id = ur.role_id
join permission p on p.permission_id = rp.permission_id
where ur.user_id = 123;