若依框架在权限控制方面使用了一些数据库表来存储相关的信息。
若依框架有前后端分离版本和微服务版本,微服务版本也采用前后端分离的架构,但与传统的前后端分离版本不同,微服务版本在后端进一步拆分为多个小型的、自治的服务。每个微服务独立负责一个特定的业务功能,并使用独立的技术栈和部署方式。
两者的数据库中涉及权限控制的表应该是一样的。

若依框架官方网址:http://doc.ruoyi.vip/


前言

若依框架在权限控制方面使用了一些数据库表来存储相关的信息。
与权限控制相关的表有以下:

  • sys_user(用户表):存储系统用户的基本信息,包括用户ID、用户名、密码等。
  • sys_role(角色表):存储角色的基本信息,包括角色ID、角色名称等。
  • sys_menu(菜单表):存储系统菜单的信息,包括菜单ID、菜单名称、父菜单ID、菜单类型等。
  • sys_dept(部门表):存储部门的信息,包括部门ID、部门名称、父部门ID等。
  • sys_user_role(用户角色关联表):用于建立用户和角色之间的关联关系,记录用户拥有的角色。
  • sys_role_menu(角色菜单关联表):用于建立角色和菜单之间的关联关系,记录角色拥有的菜单权限。
  • sys_role_dept(角色部门关联表):用于建立角色和部门之间的关联关系,记录角色在哪些部门有权限。

其他的表都是与系统配置或者业务相关。


1. 实体表

1.1 用户表 sys_user

  • 表结构
    在这里插入图片描述
    其中部门ID应该是参照部门表sys_dept
    但是所有表都没有外键,我们手动添加外键,便于后续展示表之间的关系。

  • 建表语句

drop table if exists sys_user;
create table sys_user (
  user_id           bigint(20)      not null auto_increment    comment '用户ID',
  dept_id           bigint(20)      default null               comment '部门ID',
  user_name         varchar(30)     not null                   comment '用户账号',
  nick_name         varchar(30)     not null                   comment '用户昵称',
  user_type         varchar(2)      default '00'               comment '用户类型(00系统用户)',
  email             varchar(50)     default ''                 comment '用户邮箱',
  phonenumber       varchar(11)     default ''                 comment '手机号码',
  sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
  avatar            varchar(100)    default ''                 comment '头像地址',
  password          varchar(100)    default ''                 comment '密码',
  status            char(1)         default '0'                comment '帐号状态(0正常 1停用)',
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  login_ip          varchar(128)    default ''                 comment '最后登录IP',
  login_date        datetime                                   comment '最后登录时间',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default null               comment '备注',
  primary key (user_id)
) engine=innodb auto_increment=100 comment = '用户信息表';

1.2 角色表 sys_role

  • 表结构
    在这里插入图片描述
  • 建表语句
drop table if exists sys_role;
create table sys_role (
  role_id              bigint(20)      not null auto_increment    comment '角色ID',
  role_name            varchar(30)     not null                   comment '角色名称',
  role_key             varchar(100)    not null                   comment '角色权限字符串',
  role_sort            int(4)          not null                   comment '显示顺序',
  data_scope           char(1)         default '1'                comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
  menu_check_strictly  tinyint(1)      default 1                  comment '菜单树选择项是否关联显示',
  dept_check_strictly  tinyint(1)      default 1                  comment '部门树选择项是否关联显示',
  status               char(1)         not null                   comment '角色状态(0正常 1停用)',
  del_flag             char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  create_by            varchar(64)     default ''                 comment '创建者',
  create_time          datetime                                   comment '创建时间',
  update_by            varchar(64)     default ''                 comment '更新者',
  update_time          datetime                                   comment '更新时间',
  remark               varchar(500)    default null               comment '备注',
  primary key (role_id)
) engine=innodb auto_increment=100 comment = '角色信息表';

1.3 菜单表 sys_menu

  • 表结构
    在这里插入图片描述
    菜单与菜单之间有“父子”关系

  • 建表语句

drop table if exists sys_menu;
create table sys_menu (
  menu_id           bigint(20)      not null auto_increment    comment '菜单ID',
  menu_name         varchar(50)     not null                   comment '菜单名称',
  parent_id         bigint(20)      default 0                  comment '父菜单ID',
  order_num         int(4)          default 0                  comment '显示顺序',
  path              varchar(200)    default ''                 comment '路由地址',
  component         varchar(255)    default null               comment '组件路径',
  query             varchar(255)    default null               comment '路由参数',
  is_frame          int(1)          default 1                  comment '是否为外链(0是 1否)',
  is_cache          int(1)          default 0                  comment '是否缓存(0缓存 1不缓存)',
  menu_type         char(1)         default ''                 comment '菜单类型(M目录 C菜单 F按钮)',
  visible           char(1)         default 0                  comment '菜单状态(0显示 1隐藏)',
  status            char(1)         default 0                  comment '菜单状态(0正常 1停用)',
  perms             varchar(100)    default null               comment '权限标识',
  icon              varchar(100)    default '#'                comment '菜单图标',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (menu_id)
) engine=innodb auto_increment=2000 comment = '菜单权限表';

1.4 部门表 sys_dept

  • 表结构
    在这里插入图片描述
    部门与部门之间有“父子”关系

  • 建表语句

drop table if exists sys_dept;
create table sys_dept (
  dept_id           bigint(20)      not null auto_increment    comment '部门id',
  parent_id         bigint(20)      default 0                  comment '父部门id',
  ancestors         varchar(50)     default ''                 comment '祖级列表',
  dept_name         varchar(30)     default ''                 comment '部门名称',
  order_num         int(4)          default 0                  comment '显示顺序',
  leader            varchar(20)     default null               comment '负责人',
  phone             varchar(11)     default null               comment '联系电话',
  email             varchar(50)     default null               comment '邮箱',
  status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time 	    datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  primary key (dept_id)
) engine=innodb auto_increment=200 comment = '部门表';

2.联系表

2.1 用户-角色关联表 sys_user_role

用户N-1角色

  • 表结构
    在这里插入图片描述
    给两个属性都添加了外键

  • 建表语句

drop table if exists sys_user_role;
create table sys_user_role (
  user_id   bigint(20) not null comment '用户ID',
  role_id   bigint(20) not null comment '角色ID',
  primary key(user_id, role_id)
) engine=innodb comment = '用户和角色关联表';

2.2 角色-菜单关联表 sys_role_menu

角色1-N菜单

  • 表结构
    在这里插入图片描述
    给两个属性都添加了外键

  • 建表语句

drop table if exists sys_role_menu;
create table sys_role_menu (
  role_id   bigint(20) not null comment '角色ID',
  menu_id   bigint(20) not null comment '菜单ID',
  primary key(role_id, menu_id)
) engine=innodb comment = '角色和菜单关联表';

2.3 角色-部门关联表 sys_role_dept

角色1-N部门

  • 表结构
    在这里插入图片描述
    给两个属性都添加了外键

  • 建表语句

drop table if exists sys_role_dept;
create table sys_role_dept (
  role_id   bigint(20) not null comment '角色ID',
  dept_id   bigint(20) not null comment '部门ID',
  primary key(role_id, dept_id)
) engine=innodb comment = '角色和部门关联表';

除此之外,用户表中部门ID参照了部门表,另外还有岗位表sys_post以及用户与岗位之间的对应表sys_user_post,用以表示用户所属的部门及岗位,与权限控制无关。


3.数据视图

在数据库中,上述表之间的关系如图(添加了外键)
在这里插入图片描述
画一个简单的ER图如下:
在这里插入图片描述
简单来说:
系统是通过将用户与角色关联来进行权限控制的,一个用户只能属于一个角色,一个角色可以有多个用户;
可以给角色分配菜单权限和部门权限,一个角色可以有多个菜单,同时一个菜单也可以被多个角色使用吧,部门同理(所以这里感觉Role-Menu与Role-Dept都是多对多联系,官方给的注释有误,但是实现上没问题);
Role-Dept是设置在部门管理中,某个角色可以管理哪些部门;
1号角色超级管理员拥有所有菜单及部门的权限,不用在数据库表中显示表明。

以上就是若依框架中与权限控制相关的数据库表的简单解析,具体实现以及各项菜单功能十分复杂,有待研究。


Logo

快速构建 Web 应用程序

更多推荐