react动态路由

框架的权限控制(在config.ts中配置)

export default {access: {},
};

权限配置文件(access.ts)

新建 src/access.ts ,在该文件中 export default 一个函数,定义用户拥有的权限


该文件需要返回一个 function,返回的 function 会在应用初始化阶段被执行,执行后返回的对象将会被作为用户所有权限的定义。对象的每个 key 对应一个 boolean 值,只有 true 和 false,代表用户是否有该权限

1.定义normalroutes数组,包含普通用户默认访问的页面

 const normalRoutes = ['dashboard', 'user']; // 普通用户默认权限

2.定义adminroutes数组,包含管理员默认访问的页面

const adminRoutes = ['admin', 'settings', 'card', 'list.table-list', 'class', 'study', 'goods', '商品管理', '订单管理', '轮播管理'];

3.定义adminroutes数组,包含所有用户默认访问的页面

const allUserRoutes = ['welcome'];

4.根据用户是否是管理员,合并normalroutes得到hasRoutes数组

const hasRoutes = isAdmin ? [...normalRoutes, ...adminRoutes] : normalRoutes;
  return {adminRouteFilter: () => isAdmin,normalRouteFilter: (route) => hasRoutes.includes(route.name),allUserRouteFilter: (route) => allUserRoutes.includes(route.name),};
}  

路由配置文件
 

在每个路由中使用相应的权限过滤规则,需要按以下方式在常规路由配置中加上 access 这一项

/*** @name umi 的路由配置* @description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置* @param path  path 只支持两种占位符配置,第一种是动态参数 :id 的形式,第二种是 * 通配符,通配符只能出现路由字符串的最后。* @param component 配置 location 和 path 匹配后用于渲染的 React 组件路径。可以是绝对路径,也可以是相对路径,如果是相对路径,会从 src/pages 开始找起。* @param routes 配置子路由,通常在需要为多个路径增加 layout 组件时使用。* @param redirect 配置路由跳转* @param wrappers 配置路由组件的包装组件,通过包装组件可以为当前的路由组件组合进更多的功能。 比如,可以用于路由级别的权限校验* @param name 配置路由的标题,默认读取国际化文件 menu.ts 中 menu.xxxx 的值,如配置 name 为 login,则读取 menu.ts 中 menu.login 的取值作为标题* @param icon 配置路由的图标,取值参考 https://ant.design/components/icon-cn, 注意去除风格后缀和大小写,如想要配置图标为 <StepBackwardOutlined /> 则取值应为 stepBackward 或 StepBackward,如想要配置图标为 <UserOutlined /> 则取值应为 user 或者 User* @doc https://umijs.org/docs/guides/routes*/
// 引入常量
import { ADMIN_PAGE, SETTINGS_PAGE, CARD_PAGE, LIST_TABLE_LIST_PAGE, CLASS_PAGE, STUDY_PAGE, GOODS_PAGE, GOODS_MANAGEMENT_PAGE, ORDER_MANAGEMENT_PAGE, BANNER_MANAGEMENT_PAGE } from './access';export default [{path: '/user',layout: false,routes: [{name: 'login',path: '/user/login',component: './User/Login',access: 'adminRouteFilter',},],},{path: '/welcome',name: 'welcome',icon: 'crown',component: './Welcome',access: 'allUserRouteFilter',},{path: '/card',name: CARD_PAGE,icon: 'smile',component: './Card',access: 'adminRouteFilter',},{path: '/admin',name: ADMIN_PAGE,icon: 'crown',access: 'adminRouteFilter',routes: [{path: '/admin',redirect: '/admin/sub-page',access: 'normalRouteFilter',},{path: '/admin/sub-page',name: 'sub-page',component: './Admin',access: 'normalRouteFilter',},],},{name: LIST_TABLE_LIST_PAGE,icon: 'table',path: '/list',component: './TableList',access: 'adminRouteFilter',},{name: CLASS_PAGE,icon: 'crown',path: '/class',component: './Class',access: 'adminRouteFilter',},{path: '/study',name: STUDY_PAGE,icon: 'table',component: './Study',access: 'adminRouteFilter',},{path: '/goods',name: GOODS_PAGE,icon: 'smile',component: './Goods',access: 'adminRouteFilter',},{path: '/Controls',name: GOODS_MANAGEMENT_PAGE,icon: 'table',access: 'adminRouteFilter',routes: [{path: '/Controls/list',name: '商品列表',component: './Controls/list',access: 'adminRouteFilter',},{path: '/Controls/rubbish',name: '商品回收站',component: './Controls/rubbish',access: 'adminRouteFilter',},],},{path: '/order',name: ORDER_MANAGEMENT_PAGE,icon: 'smile',component: './order',access: 'adminRouteFilter',},{path: '/banner',name: BANNER_MANAGEMENT_PAGE,icon: 'crown',component: './banner',access: 'adminRouteFilter',},{path: '/',redirect: '/welcome',},{path: '*',layout: false,component: './404',},
];    

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

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

相关文章

Android里面如何优化xml布局

在 Android 开发中&#xff0c;以下是系统化的优化方案&#xff0c;从基础到高级分层解析&#xff1a; 一、基础优化策略 1. 减少布局层级 问题&#xff1a;每增加一层布局&#xff0c;测量/布局时间增加 1-2ms 解决方案&#xff1a; <!-- 避免嵌套 --> <LinearLayo…

基于STM32、HAL库的IP6525S快充协议芯片简介及驱动程序设计

一、简介: IP6525S是一款高性能的同步降压DC-DC转换器芯片,具有以下特点: 输入电压范围:4.5V至32V 输出电压范围:0.8V至30V 最大输出电流:5A 效率高达95% 可编程开关频率(100kHz-1MHz) 支持PWM和PFM模式 内置过流保护、过温保护等功能 该芯片常用于工业控制、通信设备…

二分算法的入门笔记

二分查找 使用前提&#xff1a;有序。可理解为枚举的一种技巧。时间复杂度&#xff1a; l o g ( n ) log(n) log(n) 基础模版代码 使用时根据情景进行相应的变化。注意跳出条件and分支处理方式and返回答案&#xff0c;三者之间的配合&#xff0c;不要进入死循环。可以在模拟…

轻量级Java跨包调用(完全解耦)

Java函数式命令模式 轻量级跨包调用解耦方案&#xff0c;让跨包调用就像调用本地接口那样简单。适用与具有公共依赖的两个jar包&#xff0c;但是又不想相互引入对方作为依赖。 函数式命令模式&#xff0c;很好地实现了跨包调用解耦的目标&#xff0c;并且通过泛型JSON动态转换保…

离散数学问题集--问题5.9

问题 5.9 综合了计算机组成原理、数字逻辑和离散数学中的关键概念&#xff0c;旨在帮助学生理解二进制算术运算的硬件实现、逻辑门与算术运算的关系&#xff0c;以及如何使用数学方法来验证数字系统的正确性。它强调了从规范到实现再到验证的完整过程。 思想 函数抽象&#xf…

OpenLayers:海量图形渲染之矢量切片

最近由于在工作中涉及到了海量图形渲染的问题&#xff0c;因此我开始研究相关的解决方案。在咨询了许多朋友之后发现矢量切片似乎是行业内最常用的一种解决方案&#xff0c;于是我便开始研究它该如何使用。 一、什么是矢量切片 矢量切片按照我的理解就是用栅格切片的方式把矢…

神经网络入门—自定义网络

网络模型 定义一个两层网络 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F# 定义神经网络模型 class Net(nn.Module):def __init__(self, init_x0.0):super().__init__()self.fc1 nn.Linear(1, 10)self.fc2 nn.Linear(…

无人机装调与测试

文章目录 前言一、无人机基本常识/预备知识&#xff08;一&#xff09;无人机飞行原理无人机硬件组成/各组件作用1.飞控2.GPS3.接收机4.电流计5.电调6.电机7.电池8.螺旋桨9.UBEC&#xff08;稳压模块&#xff09; &#xff08;二&#xff09;飞控硬件简介&#xff08;三&#x…

2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛&#xff08;China Undergraduate Mathematical Contest in Modeling&#xff09;是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动&#xff0c;目的在于激…

Linux入门指南:从零开始探索开源世界

&#x1f680; 前言 大家好&#xff01;今天我们来聊一聊Linux这个神奇的操作系统~ &#x1f916; 很多小伙伴可能觉得Linux是程序员专属&#xff0c;其实它早已渗透到我们生活的各个角落&#xff01;本文将带你了解Linux的诞生故事、发行版选择攻略、应用领域&#xff0c;还有…

记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法

记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法 报错内容尝试第一次解决方法尝试第二次解决方法注意事项参考连接 报错内容 Unable to download server on client side: Error: Request downloadRequest failed unexpectedly without providing any details… Will tr…

Cursor+MCP学习记录

参考视频 Cursor MCP 王炸&#xff01;彻底颠覆我的Cursor工作流&#xff0c;效率直接起飞_哔哩哔哩_bilibili 感觉这个博主讲的还不错 所使用到的网址 Smithery - Model Context Protocol Registry Introduction - Model Context Protocol 学习过程 Smithery - Model …

testflight上架ipa包-只有ipa包的情况下如何修改签名信息为苹果开发者账户对应的信息-ipa苹果包如何手动改签或者第三方工具改签-优雅草卓伊凡

testflight上架ipa包-只有ipa包的情况下如何修改签名信息为苹果开发者账户对应的信息-ipa苹果包如何手动改签或者第三方工具改签-优雅草卓伊凡 直接修改苹果IPA包的签名和打包信息并不是一个推荐的常规做法&#xff0c;因为这可能违反苹果的开发者条款&#xff0c;并且可能导致…

深入解析Java内存与缓存:从原理到实践优化

一、Java内存管理&#xff1a;JVM的核心机制 1. JVM内存模型全景图 ┌───────────────────────────────┐ │ JVM Memory │ ├─────────────┬─────────────────┤ │ Thread │ 共享…

紫光展锐5G SoC T8300:影像升级,「定格」美好世界

影像能力已成为当今衡量智能手机性能的重要标尺之一。随着消费者对手机摄影需求日益提升&#xff0c;手机厂商纷纷在影像硬件和算法上展开激烈竞争&#xff0c;力求为用户带来更加出色的拍摄体验。 紫光展锐专为全球主流用户打造的畅享影音和游戏体验的5G SoC——T8300&#x…

【Java设计模式】第6章 抽象工厂模式讲解

6. 抽象工厂模式 6.1 抽象工厂讲解 定义:提供一个接口创建一系列相关或依赖对象,无需指定具体类。核心概念: 产品等级结构:同一类型的不同产品(如Java视频、Python视频)。产品族:同一工厂生产的多个产品(如Java视频 + Java手记)。适用场景: 需要创建多个相关联的产品…

Dify教程01-Dify是什么、应用场景、如何安装

Dify教程01-Dify是什么、应用场景、如何安装 大家好&#xff0c;我是星哥&#xff0c;上篇文章讲了Coze、Dify、FastGPT、MaxKB 对比&#xff0c;今天就来学习如何搭建Dify。 Dify是什么 **Dify 是一款开源的大语言模型(LLM) 应用开发平台。**它融合了后端即服务&#xff08…

Java后端开发-面试总结(集结版)

第一个问题&#xff0c;在 Java 集合框架中&#xff0c;ArrayList和LinkedList有什么区别&#xff1f;在实际应用场景中&#xff0c;应该如何选择使用它们&#xff1f; ArrayList 基于数组&#xff0c;LinkedList 基于双向链表。 在查询方面 ArrayList 效率高&#xff0c;添加…

nslookup、dig、traceroute、ping 这些工具在解析域名时是否查询 DNS 服务器 或 本地 hosts 文件 的详细对比

host配置解析 127.0.0.1 example.comdig 测试&#xff0c;查询 DNS 服务器 nslookup测试&#xff0c;查询 DNS 服务器 traceroute测试&#xff0c;先读取本地 hosts 文件&#xff0c;再查询 DNS 服务器 ping测试&#xff0c;先读取本地 hosts 文件&#xff0c;再查询 DNS 服务…

文件上传、读取与包含漏洞解析及防御实战

一、漏洞概述 文件上传、读取和包含漏洞是Web安全中常见的高危风险点&#xff0c;攻击者可通过此类漏洞执行恶意代码、窃取敏感数据或直接控制服务器。其核心成因在于开发者未对用户输入内容进行充分验证或过滤&#xff0c;导致攻击者能够绕过安全机制&#xff0c;上传或执行…