实践[数据库] 针对多业务的角色菜单授权数据库设计

185 阅读2分钟

如何设计一个针对多个业务的用户角色授权设计。我们的需求是我们的系统拥有多个业务,每个业务都是互不影响的,一个用户可以用于多个业务,一个业务下可以操作相应的业务菜单,同时每个业务人员根据职能不同,一个业务下可以配置不同的菜单权限。E-R图如下

image.png

数据库字典如下

业务菜单
    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,授权则是根据选定的角色不同从而使配置的菜单不同,实现不同用户操作不同菜单。