若依RuoYi框架数据库权限控制表解析

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

若依框架官方网址: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号角色超级管理员拥有所有菜单及部门的权限,不用在数据库表中显示表明。

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


  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
若按照RuoYi框架进行前后端分离,你需要进行以下步骤: 1. 创建前端项目:首先,你需要创建一个前端项目,可以选择使用Vue.js、React.js或Angular等框架进行开发。 2. 配置前端项目:在前端项目中,你需要配置相关的路由、页面组件以及与后端接口通信的方法。可以使用axios或fetch等工具发送HTTP请求。 3. 定义接口规范:在后端项目中,你需要定义接口的URL路径、请求方式、请求参数以及返回数据的格式。 4. 实现后端接口:根据前端定义的接口规范,在后端项目中实现对应的接口逻辑。可以使用RuoYi提供的注解和工具类简化开发过程。 5. 跨域配置:由于前后端分离的架构,前端项目和后端项目可能存在跨域请求的问题。你需要在后端配置跨域访问权限,确保前端可以正常调用后端接口。 6. 接口测试与调试:完成前后端的开发和配置后,你可以通过Postman或浏览器等工具进行接口测试和调试,确保数据的正常传输和交互。 7. 部署与运行:最后,你可以将前端项目打包成静态文件,并将其部署到Web服务器上。同时,将后端项目部署到应用服务器上,启动应用程序。 这样,你就成功实现了RuoYi框架的前后端分离。前端负责展示和用户交互,后端负责处理业务逻辑和数据存储。通过接口的方式进行通信,实现了前后端的解耦和独立开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值