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.pswp.cn/pingmian/76145.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76145.shtml
英文地址,請注明出處:http://en.pswp.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;上傳或執行…