场景:收银员 A 只能查看商品,收银员 B 额外拥有“修改商品”权限

场景:收银员 A 只能查看商品,收银员 B 额外拥有“修改商品”权限

场景:收银员 A 只能查看商品,收银员 B 额外拥有“修改商品”权限

纯数据库视角,无代码,按“建表 → 初始数据 → 用户 → 授权”四步清晰展开


1️⃣ 建表(共 6 张)

| 表名 | 作用 | 关键字段 |

| ----------------- | ------------------------------------------------ | ------------------------------- |

| t_user | 用户基本信息 | id, username, password, enabled |

| t_role | 角色(如 CASHIER) | id, role_key, role_name |

| t_user_role | 用户与角色的多对多关系 | user_id, role_id |

| t_permission | 权限(如 product:view) | id, perm_key, perm_name |

| t_role_permission | 角色与权限的多对多关系 | role_id, perm_id |

| t_user_extra_perm | 用户额外权限(实现“同角色不同权限”的核心表) | user_id, perm_key |


2️⃣ 初始化固定数据

2.1 角色

| id | role_key | role_name |

| ---- | -------- | --------- |

| 1 | CASHIER | 收银员 |

2.2 权限

| id | perm_key | perm_name |

| ---- | ------------ | --------- |

| 1 | product:view | 查看商品 |

| 2 | product:edit | 修改商品 |

2.3 角色默认权限

| role_id | perm_id | 说明 |

| ------- | ------- | ---------------------------- |

| 1 | 1 | 所有收银员默认只能“查看商品” |


3️⃣ 创建用户并分配角色

3.1 用户表

| id | username | password | enabled |

| ---- | --------- | --------------------- | ------- |

| 1 | cashier_a | (BCrypt 加密后的密码) | 1 |

| 2 | cashier_b | (BCrypt 加密后的密码) | 1 |

3.2 用户-角色关系

| user_id | role_id | 说明 |

| ------- | ------- | ------------------------- |

| 1 | 1 | 用户 A 属于“收银员”角色 |

| 2 | 1 | 用户 B 也属于“收银员”角色 |


4️⃣ 给 B 单独开通“修改商品”权限

4.1 操作

t_user_extra_perm 插入一条记录:

| user_id | perm_key | 说明 |

| ------- | ------------ | --------------------------------- |

| 2 | product:edit | 仅给用户 B 额外授予“修改商品”权限 |

4.2 结果速查

| 用户 | 所属角色 | 角色自带权限 | 额外权限 | 最终拥有权限 |

| --------- | -------- | ------------ | ------------ | -------------------- |

| cashier_a | CASHIER | product:view | — | 只能查看商品 |

| cashier_b | CASHIER | product:view | product:edit | 既能查看又能修改商品 |

结论

角色表保持不变,通过 t_user_extra_perm 即可实现“同角色不同权限”的细粒度授权。


本文由萧兮的博客原创发布,欢迎转载,转载务必保留原文链接。

萧兮的博客https://www.20010515.xyz · 原文:https://www.20010515.xyz/posts/92b7b7f2-49ea-4778-97f7-ecc19ac57368