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

目录

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 + 角色管理中的权限分配,三者必须完全一致才能生效。
相关推荐
IT_陈寒1 小时前
Python开发者必知的5个高效技巧,让你的代码性能提升50%
前端·人工智能·后端
u***u6851 小时前
Vue虚拟现实案例
前端·vue.js·vr
q***96581 小时前
springboot3整合knife4j详细版,包会!(不带swagger2玩)
android·前端·后端
艾小码1 小时前
Vue 3 defineProps 与 defineEmits 深度解析
前端·javascript·vue.js
前端炒粉4 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
巧克力芋泥包5 小时前
前端使用阿里云图形验证码;并且与安卓进行交互
android·前端·阿里云
G***E3166 小时前
前端GraphQLAPI
前端
lumi.6 小时前
Vue + Element Plus 实现AI文档解析与问答功能(含详细注释+核心逻辑解析)
前端·javascript·vue.js·人工智能
z***I3946 小时前
VueGraphQLAPI
前端