若依系统权限控制全流程解析

目录

1、若依(RuoYi)系统菜单权限的完整控制流程

2、分析源码

[🚪 Step 1:用户登录-->登录接口(生成凭证)](#🚪 Step 1:用户登录-->登录接口(生成凭证))

[① 前端登录向后端发送请求](#① 前端登录向后端发送请求)

​编辑

[② 后端生成token(用户通行证------>唯一身份的标识)](#② 后端生成token(用户通行证——>唯一身份的标识))

​编辑

[🚪 Step 2:获取权限信息(我是谁?我能干什么?)](#🚪 Step 2:获取权限信息(我是谁?我能干什么?))

[① 前端登录之后调用的第一个重要接口​编辑](#① 前端登录之后调用的第一个重要接口编辑)

[② 后端处理​编辑](#② 后端处理编辑)

[🚪 Step 3: 获取动态路由 (菜单去哪了?)](#🚪 Step 3: 获取动态路由 (菜单去哪了?))

[① 前端如何控制菜单和按钮](#① 前端如何控制菜单和按钮)

[② 后端处理](#② 后端处理)

[🚪 Step 4: 接口级保护 (最后一道防线)](#🚪 Step 4: 接口级保护 (最后一道防线))

[① 前端点击菜单管理向后端发送请求](#① 前端点击菜单管理向后端发送请求)

[② 后端处理](#② 后端处理)

[🚪 Step 5:总结](#🚪 Step 5:总结)

3、自定义接口并添加权限注解

[🚪 Step 1:后端---创建 Controller 接口](#🚪 Step 1:后端—创建 Controller 接口)

[🚪 Step 2:前端---新建菜单并配置权限](#🚪 Step 2:前端—新建菜单并配置权限)

[🚪 Step 3:前端---配置角色权限](#🚪 Step 3:前端—配置角色权限)

[🚪 Step 3:数据库更新说明](#🚪 Step 3:数据库更新说明)

[🚪 Step 4:前端 --- 修改页面,添加按钮](#🚪 Step 4:前端 — 修改页面,添加按钮)

[🚪 Step 5:测试验证](#🚪 Step 5:测试验证)

[🚪 Step 6:总结](#🚪 Step 6:总结)


1、若依(RuoYi)系统菜单权限的完整控制流程

2、分析源码

🚪 Step 1:用户登录-->登录接口(生成凭证)

① 前端登录向后端发送请求
② 后端生成token(用户通行证------>唯一身份的标识)

源码分析:当你在前端输入用户名和密码后,后端验证通过,会生成一个加密字符串token

理解:简单来说,就是用户登录时,后端给用户发送一个"通行证"(token),以后用户带着这个通行证来访问其他接口,后端就知道是谁在请求了


🚪 Step 2:获取权限信息(我是谁?我能干什么?)

① 前端登录之后调用的第一个重要接口
② 后端处理

🚪 Step 3: 获取动态路由 (菜单去哪了?)

① 前端如何控制菜单和按钮

按钮是否显示?

  • 所有菜单来自 /getRouters 接口(动态路由)
  • 但最终渲染时,会过滤掉没有权限的菜单项
② 后端处理

🚪 Step 4: 接口级保护 (最后一道防线)

① 前端点击菜单管理向后端发送请求
② 后端处理

🚪 Step 5:总结

  1. Token (令牌)

    • 前端 :每次发请求(axios拦截器),都会自动在 Header 里带上 Authorization: Bearer <Token>
    • 后端:过滤器拦截请求,解析 Token,知道你是谁。
  2. Permission String (权限字符)

    • 这是一个约定好的暗号,比如 system:user:add(新增用户)。
    • 数据库 :在菜单表中,给"新增用户"按钮配置字符 system:user:add
    • 后端:PreAuthorize 检查用户有没有这个字符。
    • 前端 :按钮上写 v-hasPermi="['system:user:add']",如果有这个字符,按钮显示;没有,按钮消失。
环节 后端 前端
权限来源 sys_role_menu 表查出菜单 → 提取 perms 字段 接收 /getInfo 返回的 permissions 数组
控制依据 @PreAuthorize("@ss.hasPermi('xxx')") v-hasPermi="['xxx']"
数据一致性 都来自同一个数据库表 都依赖同一个 permissions 列表
安全性 即使绕过前端,后端也会拦截 防止用户看到不该看的

3、自定义接口并添加权限注解

🚪 Step 1:后端---创建 Controller 接口

  • 路径:ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/BookController.java
  • 然后启动服务:确保服务正常运行:http://localhost:8080

🚪 Step 2:前端---新建菜单并配置权限

🚪 Step 3:前端---配置角色权限

  • 此时,ry角色就拥有了system:book:test权限

🚪 Step 3:数据库更新说明

当保存菜单时,若依会自动更新数据库

  1. 表sys_menu中插入一条新纪录

  2. 表sys_role_menu中关联一条记录

🚪 Step 4:前端 --- 修改页面,添加按钮

  • 路径:src/views/system/student/index.vue


🚪 Step 5:测试验证

  • 登录ry用户(普通用户)

🚪 Step 6:总结

步骤 操作 关键点
1️⃣ 后端 创建接口 + 加权限注解 @PreAuthorize("@ss.hasPermi('system:test:permTest')")
2️⃣ 前端 新建菜单(按钮) 权限标识必须一致!
3️⃣ 前端 分配角色权限 普通角色勾选该按钮
4️⃣ 前端 编写按钮代码 使用 v-hasPermi + type="warning"
5️⃣ 测试 普通用户登录测试 成功弹出消息 → 权限生效
  • 若依权限 = 前端 v-hasPermi + 后端 @PreAuthorize + 角色管理中的权限分配,三者必须完全一致才能生效。
相关推荐
旧梦吟6 小时前
脚本网页 地球演化
前端·算法·css3·html5·pygame
xiaoxue..6 小时前
哨兵节点与快慢指针解决链表算法难题
前端·javascript·数据结构·算法·链表
这是个栗子6 小时前
【前端知识点总结】前端跨域问题
前端·跨域·cors
尽欢i6 小时前
踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!一行代码搞定
前端·javascript
JS_GGbond6 小时前
解锁 JavaScript 对象的“魔法宝箱”:这些方法让你玩转对象操作
前端·javascript
Doris8936 小时前
【JS】JS进阶--编程思想、面向对象构造函数、原型、深浅拷贝、异常处理、this处理、防抖节流
开发语言·javascript·ecmascript
是杉杉吖~6 小时前
《5 分钟上手 React Flex 容器:从 0 搭建响应式卡片列表》
前端·react.js·前端框架
福大大架构师每日一题7 小时前
rust 1.92.0 更新详解:语言特性增强、编译器优化与全新稳定API
java·javascript·rust
仰望.7 小时前
vue 甘特图 vxe-gantt table 拖拽任务调整开始日期和结束日期的使用,拖拽任务调整日期
vue.js·甘特图·vxe-ui
阿懂在掘金7 小时前
早点下班:在 Vue3 中少写 40%+ 的异步代码
vue.js