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

news2024/10/11 16:04:23

描述:

在字典类型从表中字典类型跳转到详情的字典数据时跳到了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.data
          const 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.coloradmin.cn/o/2205168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

如何修复 Windows 10 /11上 CrowdStrike 导致的蓝屏死机问题

CrowdStrike 是一家领先的网络安全技术提供商&#xff0c;为终端、云工作负载、身份和数据提供安全服务。其 Falcon 平台是一种统一的、云交付的安全解决方案&#xff0c;旨在防止所有类型的攻击&#xff0c;包括恶意软件等。然而&#xff0c;Windows 上 Falcon Sensor 代理的最…

ENSP静态路由实验 10.11

0x01 拓扑图 0x02 配置各接口和PC1、2的IP地址 PC1&#xff1a; PC2&#xff1a; AR1&#xff1a; 配置AR1&#xff0c;改名为R1&#xff0c;并配置各接口IP&#xff0c;随后保存。 <R1>system-view [Huawei]sysname R1 [R1]int g0/0/2 [R1-GigabitEthernet0/0/2]ip ad…

R语言结构方程模型(SEM)在生态学领域中的应用

结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0c;利用图形化模型方式清晰展示研究系统中变量间的因果网络关系&#xff0c;…

【向上管理第一步】2小时速成专业级看板,让高效汇报触手可及!

面对突如其来的重要汇报&#xff0c;您是否曾陷入时间紧迫与完美呈现的双重困境&#xff1f;想要在短时间内打造出既全面又引人注目的可视化看板&#xff0c;却苦于设计技巧的匮乏与审美眼光的局限&#xff1f;别担心&#xff0c;JVS-BI您的智慧汇报加速器&#xff0c;正蓄势待…

Java面试宝典-WEB学习

Java web学习 目录 Java web学习 1、说说 Servlet 的基本架构 2、说一说 Servlet 的生命周期? 3、如何实现一个自定义的 servlet&#xff1f; 4、servlet中有哪些核心类&#xff1f;都有什么特点&#xff1f; 5、什么情况下调用 doGet()和 doPost()&#xff1f; 6、request.ge…

自动化测试 | UnitTest框架

1. TestCase&#xff08;测试用例&#xff09; 步骤&#xff1a; 1. 导包 import unittest 2. 新建测试类并继承 unittest.TestCase 3. 测试方法必须以test字母开头 运行&#xff1a; 1. 运行测试类所有的测试方法&#xff…

国家海洋环境预报中心李本霞:全国首个海浪智能预报系统已投入业务化运行,AI助力海浪预报多项突破

近日&#xff0c;在第 20 届 CCF HPC China 2024 大会中&#xff0c;第六届海洋数值预报与高性能计算论坛圆满举办。在本次大会上&#xff0c;国家海洋环境预报中心海浪预报室主任李本霞以「人工智能在海浪预报中的应用」为主题展开演讲&#xff0c; HyperAI超神经在不违原意的…

配置MAC地址安全

概述 MAC地址安全配置是确保网络设备和通信安全的重要措施&#xff0c;通过限制、监控和管理设备的物理地址来防止未授权访问和潜在的网络威胁。以下是对MAC地址安全的概述&#xff1a; 基本概念 定义&#xff1a;MAC地址&#xff08;Media Access Control Address&#xff09…

某音商品详情sku示例参考,API说明

以下提供某音&#xff08;即抖音&#xff09;商品详情SKU&#xff08;Stock Keeping Unit&#xff0c;库存量单位&#xff09;的示例参考以及API的详细说明&#xff1a; 一、某音商品详情SKU示例参考 在抖音电商平台中&#xff0c;商品详情页通常会展示商品的SKU信息&#xff…

线性自抗扰控制(LADRC)系统算法框图

非线性ADRC(NLADRC)详细算法框图和源代码请参考专栏系列文章,常用链接如下: 1、NLADRC自抗扰控制 NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-CSDN博客文章浏览阅读1.6k次,点赞2次,收藏7次。本文介绍了如何将ADRC自抗扰控制算法从Simulink…

计算机毕业设计 | vue+SpringBoot图书借阅管理系统 图书管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 随着现在科学技术的进步&#xff0c;人类社会正逐渐走向信息化&#xff0c;图书馆拥有丰富的文献信息资源&#xff0c;是社会系统的重要组成部分&#xff0c;在信息社会中作用越来越重要&#xff0c;在我国图书馆计算机等 信息技术的应用起步…

MySQL数据库表分区

1.背景 当前数据库中&#xff0c;数据库表已经存在&#xff0c;同时该数据库表的数据还在每天不断增长。因为数据库表太大&#xff0c;导致检索过程耗时&#xff0c;为提高检索效率&#xff0c;故对相关数据库表进行分区处理。 2.MySQL分区 分区就是将一个表分解成多个区块进…

补充面试知识点

jwt鉴权 实现登录流程 jwt鉴权登录实现步骤&#xff08;JWT工具类拦截器前端配置&#xff09;——前后端鉴权方案和使用_jwtsigner-CSDN博客 就是前端每一次刷新页面的时候 都判断一下发来的请求头里边的token信息 通过token识别用户信息和登录状态也就是id 线程池的执行流程 …

Visual Studio2022 Razor格式化慢

菜单&#xff1a;工具-->选项-->文本编辑器-->HTML 设置使用旧版本Razor 为True Razor文件格式化变很快

师生共评作业管理:Spring Boot系统的设计与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

深入理解 JDK 的 Optional 类

深入理解 JDK 的 Optional 类 深入理解 JDK 的 Optional 类1. 什么是 Optional&#xff1f;1.1 主要构造方法示例 2. Optional 的常用方法2.1 判断值是否存在示例2.2 获取值示例2.3 进行操作示例 3. 使用场景3.1 避免 null 值示例3.2 提高代码可读性3.3 与流结合示例 4. 注意事…

利用C++封装鼠标轨迹算法为DLL:游戏行为检测的利器

在现代软件开发中&#xff0c;鼠标轨迹模拟技术因其在自动化测试、游戏脚本编写等领域的广泛应用而备受青睐。本文将介绍如何使用C语言将鼠标轨迹算法封装为DLL&#xff08;动态链接库&#xff09;&#xff0c;以便在多种编程环境中实现高效调用&#xff0c;同时探讨其在游戏行…

十一长假!迷你主机小巧便携成为假期新宠。

在十.一国庆长假期间&#xff0c;出游成为许多人的首选活动&#xff0c;你是否已按捺不住内心的悸动&#xff0c;渴望一场说走就走的旅行&#xff1f;但面对繁重的行李与有限的背包空间&#xff0c;如何在享受旅途美景的同时&#xff0c;又不失娱乐与工作的便捷性&#xff1f;今…

Chrome与Firefox浏览器HTTP自动跳转HTTPS的解决方案

一、背景介绍 随着网络安全意识的不断提高&#xff0c;越来越多的网站开始采用HTTPS协议&#xff0c;以确保数据传输的安全性。然而&#xff0c;有时用户在浏览网页时&#xff0c;可能会遇到HTTP请求被自动跳转至HTTPS的情况导致网站打不开&#xff0c;提示安全问题&#xff0…