本文记录对用户管理的重构经历,主要是三个方面:权限,角色,账号。
1、介绍权限,角色,账号的作用
- 权限:用户的访问权限,包括菜单,页面,跳转页面,按钮四个粒度。
- 角色:用户的角色情况,可以理解为是权限的集合。
- 账号:用户的个人账号。
2、介绍原始结构
- 一个用户拥有一个账号。
- 一个账号可以拥有多个角色,如果这个账号是管理员,可以管理账号,管理角色。
- 一个角色拥有多个权限。
3、介绍权限,角色,账号结构
- 权限是树形结构,层级展开。
- 角色单层级结构,角色有管理员属性,全局展示(管理员可以管理所有角色)。
- 账号单层级结构,管理员可以管理所有账号。
问题:
- 账号设置为管理员角色以后使用繁琐。
- 管理员可以管理所有角色,所有账号,粒度太大。
为了解决上面两个问题,进行了第一次重构,重构以后的方案如下
- 权限保持不变。
- 角色设置为树形结构,管理员可以管理自己创建的角色。
- 账号设置为树形结构,管理员可以管理自己创建的账号。
- 初始化一个超级管理员,超级管理拥有所有权限。
- 将管理员从角色维度转移到账号维度。
这个方案使用一段时间后发现新的问题
- 角色冗余,每个管理员创建相同的角色。
- 如果一个部门有两个管理员,单个管理员无法管理所有账号。
- 如果管理员离职,将一个管理员的账号转移到另一个管理员下及其繁琐。
为了解决新的问题,最后进行了第二次重构,重构后结构如下
- 权限保持不变。
- 角色保持树形结构,添加“是否全局”来解决冗余问题。
- 账号保持树形结构,给每一个部门添加一个“管理员”账号进行管理(没有实际意义)。
总结:不要过度设计优化,根据实际情况来设计对应的方案,操作不要太繁琐,多变通。