若依 从字典类型跳到字典数据跳到了404

描述:

在字典类型从表中字典类型跳转到详情的字典数据时跳到了404

解决过程:

由于我的id统一是用GUID,所以想到了路由表相关路由的正则校验,若依是int类型,我直接删掉了,改了之后还是跳404

后面想是路由表权限校验问题,又注释掉了权限,结果还是不行

传空数组和直接注释都试过,后面问gpt,还有路由没加进路由表的情况,所以想到了动态路由添加那

解决:

首先要熟悉一下这类路由跳转的大致逻辑:

大致逻辑:
1.在路由表定义相关的路由:
//...\src\router\index.js
export const dynamicRoutes = [
...{path: '/system/dict-data',component: Layout,hidden: true,permissions: ['system:dict:list'],children: [{path: 'index/:id',component: () => import('@/views/system/dict/data'),name: 'Data',meta: { title: '字典数据', activeMenu: '/system/dict' }}]}
...
2.路由守卫调用方法筛掉不合适的路由
...\src\permission.js ->  ...\src\store\modules\permission.js
router.beforeEach()   ->  GenerateRoutes()->filterDynamicRoutes()

filterDynamicRoutes()相关介绍:

// 动态路由遍历,验证是否具备权限
export function filterDynamicRoutes(routes) {const res = []routes.forEach(route => {//按权限验证if (route.permissions) {//路由要有权限标识,及用户对应的角色权限里面也要对应有if (auth.hasPermiOr(route.permissions)) {res.push(route)}} else if (route.roles) {//按角色验证if (auth.hasRoleOr(route.roles)) {res.push(route)}}})return res
}

为什么需要分开:

  1. 灵活性: 有些场景下,系统可能既需要粗粒度的角色控制,也需要细粒度的权限控制。通过分别控制权限和角色,能够更灵活地定义不同用户的访问规则。

  2. 复用性: 某些权限可能跨多个角色存在,例如“编辑”权限可能存在于管理员和编辑者角色中。通过使用权限系统,可以避免重复定义每个角色的具体操作权限。

  3. 分层管理: 在权限控制系统中,角色一般用于管理一大类用户的访问能力,而权限则用于更加细致地控制具体功能的访问。这样,系统既可以通过角色来赋予用户权限,也可以通过单独的权限控制一些细节操作。

  • 角色验证: 例如,admin 角色可以访问管理员界面,但普通用户不能访问。
  • 权限验证: 即使同为 admin 角色,有些管理员可能只具备“查看”权限,而另一些管理员具备“编辑”或“删除”权限。
3.dict.vue展示与跳转
      //...\src\views\system\dict\index.vue<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"><template slot-scope="scope"><router-link :to="'/system/dict-data/index/' + scope.row.id"   class="link-type"><span>{{ scope.row.dictType }}</span></router-link></template></el-table-column>

路由会根据'/system/dict-data/index/' + scope.row.id生成的链接跟添加进路由表的路由(1中准备的)对比,符合的话会直接跳到路由相应的path。

router-link中to的链接要和路由中的path+children.path对应上

原因

我这跳转到404的原因是我的后端没穿相应的权限过来,导致筛路由的时候(filterDynamicRoutes())因为没有权限没把路由加进路由表。所以对比时生成的链接对了,但是找不到该路由(/system/dict-data),跳到了404。

解决:

把相应的路由加进路由表就行,即把相应的权限给传给前端。通过filterDynamicRoutes()的筛选

//...\src\store\modules\user.js// 获取用户信息GetInfo({ commit, state }) {return new Promise((resolve, reject) => {//根据角色获取相应权限,由token判断用户所属角色getInfo().then(res => {const user = res.dataconst avatar = (user.avatarUrl == "" || user.avatarUrl == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatarUrl;if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组commit('SET_ROLES', res.roles)commit('SET_PERMISSIONS', res.permissions)} else {commit('SET_ROLES', ['ROLE_DEFAULT'])}commit('SET_ID', user.userId)commit('SET_NAME', user.userName)commit('SET_AVATAR', avatar)resolve(res)}).catch(error => {reject(error)})})},
....
//请求方法在...\src\api\login.js
// 获取用户详细信息
export function getInfo() {return request({headers: {isToken: true},url: '/api/Auth/GetUserInfo',method: 'get'})
}

后端把这仨传完整:

对权限相关改造有兴趣可以看一下这个:

若依 根据角色权限 动态添加路由 学习-CSDN博客

总结

主要还是对若依路由的添加过程不太熟悉,排查的时候都没想到这个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/444938.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微服务】网关 - Gateway(下)(day8)

网关过滤工厂 在上一篇文章中&#xff0c;主要是对网关进行了一个总体的介绍&#xff0c;然后对网关中的断言进行了一个描述。在这篇文章中&#xff0c;主要是对网关中的最后一大核心——过滤进行介绍。 当客户端发送过来的请求经过断言之后&#xff0c;如果还想在请求前后添…

智能制造与精益制造的模型搭建

现行制造模式分析I-痛点改善思路-管控省优四化推行

中间件有哪些分类?

中间件的分类 中间件是位于操作系统和应用程序之间的软件&#xff0c;它提供了一系列服务来简化分布式系统中的应用程序开发和集成。中间件可以根据其功能和用途被分为不同的类别。以下是中间件的一些主要分类&#xff1a; 1. 通信处理&#xff08;消息&#xff09;中间件&am…

利用编程思维做题之反转链表

牛客网题目 1. 理解问题 给到我们的是一个单链表的头节点 pHead&#xff0c;要求反转后&#xff0c;返回新链表的头节点。 首先在心里设想能够快速理解的例子&#xff0c;如给你123序列&#xff0c;要你反转此序列如何回答&#xff1f;将最后一个数字3作为头&#xff0c;然后修…

使用Qt Creator创建项目

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 使用Qt Creator创建项目 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 温馨提示: 1. 新…

基于SpringBoot+Vue的非物质文化遗产保护与传播系统设计实现(地图组件)

&#x1f388;系统亮点&#xff1a;地图组件&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框架Vue.js&#x…

C/C++进阶(一)--内存管理

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; 学习专栏C语言_Stark、的博客-CSDN博客 其它专栏&#xff1a; 数据结构与算法_Stark、的博客-CSDN博客 ​​​​​​项目实战C系列_Stark、的博客-CSDN博客 座右铭&a…

RDD优化:缓存和checkpoint机制、数据共享(广播变量、累加器)、RDD的依赖关系、shuffle过程、并行度说明

文章目录 1. 缓存和checkpoint机制1.1 缓存使用1.2 checkpoint1.3 缓存和checkpoint的区别 2. 数据共享2.1 广播变量2.2 累加器 3. RDD依赖关系4.shuffle过程4.1 shuffle介绍4.2 spark计算要尽量避免shuffle 5. 并行度 1. 缓存和checkpoint机制 缓存和checkpoint也叫作rdd的持…

Springboot 整合 Java DL4J 实现企业门禁人脸识别系统

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

vue后台管理系统从0到1(3)element plus 的三种导入方式

文章目录 vue后台管理系统从0到1&#xff08;3&#xff09;element plus 的三种导入方式element plus 引入方式完整引入按需导入手动导入 vue后台管理系统从0到1&#xff08;3&#xff09;element plus 的三种导入方式 element plus 引入方式 官方网址&#xff1a;https://el…

windows系统更新升级node指定版本【避坑篇!!!亲测有效】(附带各版本node下载链接)一定看到最后!不用删旧版!

Node.js 是一个开源、跨平台的 JavaScript 运行时环境&#xff0c;广泛应用于服务器端和网络应用的开发。随着 Node.js 版本的不断更新&#xff0c;我们可能需要升级到特定版本以满足项目需求或修复安全漏洞。又或者是学习开发另外一个新项目&#xff0c;新项目对Node版本要求更…

优达学城 Generative AI 课程2:Large Language Models (LLMs) Text Generation

建议先了解一下附录知识。 文章目录 1 官方课程内容自述Lesson 1: 大型语言模型&#xff08;LLMs&#xff09;简介Lesson 2: 自然语言处理&#xff08;NLP&#xff09;基础Lesson 3: Transformer 和注意力机制Lesson 4: 检索增强生成&#xff08;RAG&#xff09;Lesson 5: 为大…

查找企业联系电话的几种方法

在商业合作和销售拓展的过程中&#xff0c;找到企业的联系电话是至关重要的一步。无论是精准营销还是客户开发&#xff0c;拥有有效的联系方式可以大大提高成功率。那么&#xff0c;如何快速有效地查找企业联系电话呢&#xff1f;下面介绍几种常见的方法&#xff0c;以及如何借…

如何解决项目跟进中关键节点难以把控的问题?

在项目跟进的过程中&#xff0c;关键节点的把控常常是一个棘手的问题。如果不能有效地管理这些节点&#xff0c;项目可能会偏离轨道&#xff0c;导致延误、成本超支甚至失败。下面我们来分析一下都有哪些关键节点难以把控以及相应的应对策略。 1、需求变更节点 在项目进行中&a…

快速入门Tomcat服务(业务发布基础技能)

文章目录 1 Tomcat简介 2 安装tomcat 2.1 安装jdk 2.2 安装Tomcat 3 Tomcat目录结构 4 Tomcat重要配置文件 1 Tomcat简介 Tomcat是Sun公司官方推荐的Servlet和JSP容器&#xff0c;在中小型系统和并发访问用户不是很多的场合下&#xff0c;其作为轻量级应用服务…

无刷直流电机工作原理:【图文讲解】

电动机 (俗称马达) 是机械能与电能之间转换装置的通称。可以分为电动机和发电机.一般称电机时就是指电动机。这个在日常应用中&#xff0c;比较多见&#xff0c;比如机器人&#xff0c;手机&#xff0c;电动车等。 直流电机&#xff1a;分为有刷直流电机&#xff08;BDC&#…

HTTP的工作原理

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在计算机网络上传输超文本数据的应用层协议。它是构成万维网的基础之一&#xff0c;被广泛用于万维网上的数据通信。&#xff08;超文本(Hypertext)是用超链接的方法&#xff0c;将各种不同空间的文字信息组…

【MySQL】CRUD增删改查操作

文章目录 CRUD简介一、Creat 新增1.单行数据全列插入2.单行数据全指定列插入3.多行数据指定列插入 二、Retrieve 检索1.全列查询 --练习阶段最简单的查询&#xff1a;&#xff08;在生产环境最好不要用&#xff01;&#xff01;&#xff09;2.指定列查询3.结果去重查询4.where条…

柒拾伍- AI内容农场生产文章自动发布至公众号 (一)

一、内容农场 X AI 看过很多的新闻说 AI 产生 内容 污染网络&#xff0c;我也想试一下到底能污染成怎样。 然后为了编写爆款的内容&#xff0c;我选用这个 内容农场 的种子是来源于 微博热搜&#xff0c;让生长出来的垃圾文章更加火爆 涉及内容不能放 二、编写代码 关于代…

常用类(一)----包装类的使用和分析

文章目录 1.包装类2.课堂测试题3.包装类方法4.Integer创建机制5.Integer面试题 1.包装类 概念&#xff1a;基本数据类型对应的类就是包装类&#xff0c;就是为了把基本数据类型转换为包装类&#xff0c;使用这个类里面的方法操作数据----装箱的过程&#xff1b; //装箱&#…