vue-admin-template權限管理

在基于 `vue-admin-template` 實現權限管理時,通常需要結合角色權限模型和動態路由機制,以滿足不同用戶角色對頁面訪問權限的控制需求。分為路由頁面權限和按鈕權限:下面是具體實現思路的思維導圖和具體代碼流程:

0.實現邏輯思維導圖:

1. 角色權限模型設計

在權限管理中,最基礎的模型是 RBAC( 模型,即基于角色的訪問控制。系統中定義多個角色(如管理員、普通用戶等),每個角色擁有特定的權限集合,權限可以是菜單訪問權限、按鈕操作權限等。

在 `vue-admin-template` 中,可以通過擴展路由配置來實現角色權限控制。每個路由對象可以增加 `meta` 字段,用于標識該路由所需的權限角色。

```javascript
{path: '/admin',component: Layout,meta: { roles: ['admin'] },children: [{path: 'dashboard',component: () => import('@/views/dashboard/index'),meta: { roles: ['admin'] }}]
}
```
2.?動態路由機制

`vue-admin-template` 本身是一個基礎模板,不包含動態路由功能。要實現權限控制,需要引入動態路由機制。具體流程如下:

1. 用戶登錄后,向后端請求當前用戶的角色信息。
2. 根據角色信息,從前端定義的路由表中篩選出該角色可訪問的路由。
3. 使用 `router.addRoutes()` 方法將篩選后的路由添加到 Vue Router 中。

示例代碼如下:

```javascript
import { constantRoutes, asyncRoutes } from '@/router'/*** Filter asynchronous routes through permissions* @param routes* @param roles*/
export function filterAsyncRoutes(routes, roles) {const res = []routes.forEach(route => {const tmp = { ...route }if (hasPermission(roles, tmp)) {if (tmp.children) {tmp.children = filterAsyncRoutes(tmp.children, roles)}res.push(tmp)}})return res
}/*** Determine if the route requires permission* @param roles* @param route*/
function hasPermission(roles, route) {if (route.meta && route.meta.roles) {return roles.some(role => route.meta.roles.includes(role))}return true
}const state = {routes: [],addRoutes: []
}const mutations = {SET_ROUTES: (state, routes) => {state.addRoutes = routesstate.routes = constantRoutes.concat(routes)}
}const actions = {generateRoutes({ commit }, roles) {return new Promise(resolve => {let accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)commit('SET_ROUTES', accessedRoutes)resolve(accessedRoutes)})}
}
```
3. 后端權限控制與數據庫路由表

在實際項目中,權限配置通常由后端維護,前端從接口獲取當前用戶的角色信息及可訪問的路由列表。這樣可以避免每次權限變更都需要重新發布前端代碼。

后端可以提供一個接口,例如:

```
GET /api/user/roles
```

返回示例:

```json
{"roles": ["admin", "editor"],"routes": [{"path": "/dashboard","name": "Dashboard","component": "dashboard/index","meta": {"roles": ["admin"]}}]
}
```

前端根據返回的 `routes` 字段動態生成路由表,并通過 `router.addRoutes()` 添加。

4. 按鈕權限控制

除了頁面級別的權限控制,還需要對按鈕級別的操作進行限制。通常可以通過自定義指令或組件封裝實現。

示例:自定義 `v-permission` 指令

```javascript
Vue.directive('permission', {inserted(el, binding) {const { value } = bindingconst roles = store.getters.rolesif (value && value instanceof Array && value.length > 0) {const permissionRoles = valueconst hasPermission = roles.some(role => {return permissionRoles.includes(role)})if (!hasPermission) {el.parentNode && el.parentNode.removeChild(el)}} else {throw new Error(`need roles! Like v-permission="['admin','editor']"`)}}
})
```

在模板中使用:

```html
<el-button v-permission="['admin']">刪除</el-button>
```
5. 總結

`vue-admin-template` 實現權限管理的核心在于 **角色權限模型 + 動態路由 + 按鈕權限控制**。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919983.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序,事件總線(Event Bus) 實現

1、util.js文件/*** 事件總線*/ function createEventBus() {// 私有事件存儲對象&#xff0c;通過閉包保持私有性const events {};return {/*** 監聽事件&#xff0c;只執行一次* param {string} eventName - 事件名稱* param {Function} callback - 回調函數*/once(eventNam…

OpenCV結構光三維重建類cv::structured_light::GrayCodePattern

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::structured_light::GrayCodePattern 是 OpenCV 庫中用于結構光三維重建 的一個類&#xff0c;屬于 OpenCV 的 structured_light 模塊。 它用于…

變頻器實習DAY35 引腳電平測試 退耦電阻

目錄變頻器實習DAY35一、工作內容1.1 硬性平臺RO7測試二、學習內容2.1 退耦電阻核心原理&#xff1a;2大特性抑制干擾四大關鍵作用選型&#xff1a;4個核心參數典型應用場景四大常見誤區附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器實習DAY35 一、工作內容 1.1 硬性…

C++標準庫算法:從零基礎到精通

算法庫的核心理念與設計哲學 C標準庫算法的設計遵循著一個令人稱道的哲學&#xff1a;算法與容器的分離。這種設計并非偶然&#xff0c;而是經過深思熟慮的結果。傳統的面向對象設計可能會將排序功能綁定到特定的容器類中&#xff0c;但C標準庫卻選擇了一條更加優雅的道路——…

為什么存入數據庫的中文會變成亂碼

從產生、傳輸、處理到最終存儲的整個生命周期中采用統一且正確的字符集編碼。具體原因紛繁復雜&#xff0c;主要歸結為&#xff1a;客戶端操作系統或應用與數據庫服務端字符集編碼不一致、Web應用服務器到數據庫驅動的連接層編碼配置缺失或錯誤、數據庫本身及其表、字段各層級的…

13種常見機器學習算法面試總結(含問題與優質回答)

目錄 1. K近鄰&#xff08;K-NN&#xff09; 2. 線性回歸&#xff08;一元/多元&#xff09; 3. 邏輯回歸 4. 決策樹 5. 集成學習之隨機森林 6. 貝葉斯&#xff08;樸素/高斯&#xff09; 7. SVM&#xff08;支持向量機&#xff09; 8. K-means聚類 9. DBSCAN 10. TF-…

sfc_os!SfcValidateFileSignature函數分析之WINTRUST!SoftpubLoadMessage

第一部分&#xff1a;0: kd> kc# 00 WINTRUST!SoftpubLoadMessage 01 WINTRUST!_VerifyTrust 02 WINTRUST!WinVerifyTrust 03 sfc_os!SfcValidateFileSignature 04 sfc_os!SfcGetValidationData 05 sfc_os!SfcValidateDLL 06 sfc_os!SfcQueueValidationThread 07 kernel32!B…

python寫上位機并打包250824

1.python寫的串口上位機軟件程序 import serial import serial.tools.list_ports import tkinter as tk from tkinter import ttk, scrolledtext, messagebox, filedialog import threading import time from datetime import datetime class SerialPortAssistant: def init(se…

Wagtail CRX 簡介

Wagtail CRX&#xff08;前身為 CodeRed CMS&#xff0c;由 CodeRed Corp 開發&#xff09;是一個基于 Wagtail 的 CMS 擴展包&#xff0c;主要用于快速構建營銷型網站&#xff0c;提供預置組件和增強功能。最新版本為 5.0.1&#xff08;發布于 2025 年 5 月 9 日&#xff09;。…

docker compose 安裝zabbix 7

docker compose 安裝zabbix 7 1.環境 # hostnamectlStatic hostname: ky10Icon name: computer-vmChassis: vmMachine ID: f554764e21b74c2fa057d9aaa296af63Boot ID: 4c155f0185c24a14970ab5ea60de34f4Virtualization: vmwareOperating System: Kylin Linux Advanced Server…

EtherCAT的幾種郵箱通信介紹

1. COE&#xff08;CANopen over EtherCAT&#xff09;技術特點&#xff1a;直接復用 CANopen 的對象字典&#xff08;Object Dictionary&#xff09;機制&#xff0c;通過 EtherCAT 的郵箱通信實現非周期性數據交換&#xff0c;同時支持過程數據對象&#xff08;PDO&#xff0…

【Java】springboot的自動配置

如果你用過 Spring Boot&#xff0c;一定對 “引入依賴就能用” 的體驗印象深刻 —— 加個spring-boot-starter-web就有了 Web 環境&#xff0c;這個是 SpringBoot 的自動裝配&#xff08;Auto-Configuration&#xff09;機制。自動裝配的核心注解自動裝配的邏輯看似復雜&#…

高通機型QPST平臺線刷教程 線刷全分區 只通過引導文件提取單分區 寫入單分區

高通芯片機型刷機平臺很多&#xff0c;除過一些廠家專用的平臺外。qpst是高通芯片類通用刷寫平臺。其操作簡單 可以刷寫完整固件。也可以通過單個引導文件來讀取 提取整個分區。而且包含讀寫基帶qcn等等的一些功能。 qpst工具下載 QPST 的不同版本可在多個開源平臺或技術論壇中…

ES_預處理

1. 預處理的核心概念&#xff1a;什么是 Ingest Pipeline&#xff1f; 想象一下數據進入 Elasticsearch 的旅程。原始數據&#xff08;Raw Data&#xff09;往往并不完美&#xff1a;格式可能混亂&#xff0c;字段可能缺失&#xff0c;或者需要被豐富和轉換后才能發揮最大的價值…

我從零開始學習C語言(15)- 基本類型 PART2

開始學習第七章其余部分。7.3.4 轉義序列正如在前面示例中見到的那樣&#xff0c;字符常量通常是用單引號括起來的單個字符。然而&#xff0c;一些特殊符號&#xff08;比如換行符&#xff09;是無法采用上述方式書寫的&#xff0c;因為它們不可見&#xff08;非打印字符&#…

K8S的部署與常用管理

一、k8s的部署 1.1.集群環境初始化 1.1.1.所有主機禁用swap [rootk8s- ~]# systemctl mask dev-nvme0n1p3.swap [rootk8s- ~]# swapoff -a [rootk8s- ~]# systemctl status dev-nvme0n1p3.swap [rootk8s- ~]# vim /etc/fstab 內容&#xff1a; 注釋swap 1.1.2.安裝k8s部署工…

2025年機械工程與自動化技術國際會議(ICMEAT 2025)

2025年機械工程與自動化技術國際會議&#xff08;ICMEAT 2025&#xff09; 2025 International Conference on Mechanical Engineering and Automation Technology一、大會信息會議簡稱&#xff1a;ICMEAT 2025 大會地點&#xff1a;中國杭州 審稿通知&#xff1a;投稿后2-3日內…

高數 不定積分(4-3):分部積分法

文章目錄寫在前面分部積分法&#x1f615; 一個小問題? 分部積分法是怎么來的&#xff1f;&#x1f330; 幾個小例子? 最終總結&#xff01;后話寫在前面 文章傳送門&#xff1a;高數 不定積分&#xff08;4-2&#xff09;&#xff1a;換元積分法 今天再更一篇:) 上篇文章&…

Chrome/360 瀏覽器 WebUI 資源底層機制解析:共享資源與專屬資源的奧秘

在 Chromium 和 360 瀏覽器源碼中&#xff0c;我們會發現 WebUI 頁面不僅有 C 邏輯處理&#xff08;如 WebUIMessageHandler&#xff09;&#xff0c;還伴隨著大量 HTML、CSS 和 JS 文件。尤其是 src/ui/webui/resources 和 src/chrome/browser/360/webui 這兩個目錄&#xff0…

基于springboot的高校后勤保修服務系統/基于android的高校后勤保修服務系統app

基于springboot的高校后勤保修服務系統/基于android的高校后勤保修服務系統app