如何设计一个针对多个业务的用户角色授权设计。我们的需求是我们的系统拥有多个业务,每个业务都是互不影响的,一个用户可以用于多个业务,一个业务下可以操作相应的业务菜单,同时每个业务人员根据职能不同,一个业务下可以配置不同的菜单权限。E-R图如下
数据库字典如下
业务菜单
id int 主键
name varchar 业务名称
code varchar 业务编码
img varchar 背景图
菜单表
id int 主键
appCode varchar 所属业务 一个菜单属于一个业务
url varchar 路径
icon varchar 图标
sort int 排序
label varchar 标签
用户表
id int 用户id
phone varchar 用户手机号
password varchar 密码
name varchar 用户名
角色: 一个业务可以拥有多个角色,一个角色也可以拥有多个业务
id int 主键
name varchar 角色名称
角色菜单:角色绑定菜单的
id 主键
roleId 角色id
menuId 菜单id
角色业务: 一个角色拥有多个业务
id 主键
appCode 业务编码
roleId 角色id
角色用户:一个角色可以拥有多个用户,一个用户也拥有多个角色
id 主键
roleId 角色id
userId 用户id
我们这里抽取了四大主表,分别是业务表,菜单表,角色表和用户表
- 业务表主要维护相应的业务,每个菜单最终都会关联到具体的业务,可通过业务查询数据该菜单下的数据,业务编码唯一
- 菜单表:菜单表维护菜单基本信息
- 角色表:维护橘色的基本信息
- 用户表:维护用户基本信息
四大关系表:
- 业务角色关系:一个业务拥有多个角色,一个角色也可以拥有多个业务 m:n
- 业务菜单关系:一个业务拥有多个菜单,但一个菜单属于一个角色 1:n
- 角色菜单关系:一个角色可绑定多个菜单,一个菜单可以被多个角色绑定 m:n
- 角色用户关系:一个用户可绑定多个角色,一个角色有可绑定多个用户 m:n
至此每张表的逻辑关系已经非常清晰了,接下来开始CRUD,授权则是根据选定的角色不同从而使配置的菜单不同,实现不同用户操作不同菜单。