角色权限和用户角色,正确映射?

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 用于映射角色权限和用户角色。有更好的方法吗?

你有这个权利。

分解成两个独立的多对多关系。一个在 userrole 之间。另一个在rolepermission之间。

这两个多对多关系中的每一个都需要一个类似于您所描述的连接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)
);

当您想获取 userpermission 值列表时:

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;