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

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

文章目录

  • 前言
  • 1. 实体表
    • 1.1 用户表 sys_user
    • 1.2 角色表 sys_role
    • 1.3 菜单表 sys_menu
    • 1.4 部门表 sys_dept
  • 2.联系表
    • 2.1 用户-角色关联表 sys_user_role
    • 2.2 角色-菜单关联表 sys_role_menu
    • 2.3 角色-部门关联表 sys_role_dept
  • 3.数据视图

前言

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

  • 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_incrementcomment '用户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未知)',avatarvarchar(100)default '' comment '头像地址',passwordvarchar(100)default '' comment '密码',statuschar(1) default '0'comment '帐号状态(0正常 1停用)',del_flagchar(1) default '0'comment '删除标志(0代表存在 2代表删除)',login_ipvarchar(128)default '' comment '最后登录IP',login_datedatetime comment '最后登录时间',create_by varchar(64) default '' comment '创建者',create_time datetime comment '创建时间',update_by varchar(64) default '' comment '更新者',update_time datetime comment '更新时间',remarkvarchar(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_idbigint(20)not null auto_incrementcomment '角色ID',role_namevarchar(30) not null comment '角色名称',role_key varchar(100)not null comment '角色权限字符串',role_sortint(4)not null comment '显示顺序',data_scope char(1) default '1'comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',menu_check_strictlytinyint(1)default 1comment '菜单树选择项是否关联显示',dept_check_strictlytinyint(1)default 1comment '部门树选择项是否关联显示',status char(1) not null comment '角色状态(0正常 1停用)',del_flag char(1) default '0'comment '删除标志(0代表存在 2代表删除)',create_byvarchar(64) default '' comment '创建者',create_timedatetime comment '创建时间',update_byvarchar(64) default '' comment '更新者',update_timedatetime 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_incrementcomment '菜单ID',menu_name varchar(50) not null comment '菜单名称',parent_id bigint(20)default 0comment '父菜单ID',order_num int(4)default 0comment '显示顺序',pathvarchar(200)default '' comment '路由地址',component varchar(255)default null comment '组件路径',query varchar(255)default null comment '路由参数',is_frameint(1)default 1comment '是否为外链(0是 1否)',is_cacheint(1)default 0comment '是否缓存(0缓存 1不缓存)',menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)',visible char(1) default 0comment '菜单状态(0显示 1隐藏)',statuschar(1) default 0comment '菜单状态(0正常 1停用)',perms varchar(100)default null comment '权限标识',iconvarchar(100)default '#'comment '菜单图标',create_by varchar(64) default '' comment '创建者',create_time datetime comment '创建时间',update_by varchar(64) default '' comment '更新者',update_time datetime comment '更新时间',remarkvarchar(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_incrementcomment '部门id',parent_id bigint(20)default 0comment '父部门id',ancestors varchar(50) default '' comment '祖级列表',dept_name varchar(30) default '' comment '部门名称',order_num int(4)default 0comment '显示顺序',leadervarchar(20) default null comment '负责人',phone varchar(11) default null comment '联系电话',email varchar(50) default null comment '邮箱',statuschar(1) default '0'comment '部门状态(0正常 1停用)',del_flagchar(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号角色超级管理员拥有所有菜单及部门的权限,不用在数据库表中显示表明。

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