這篇文章為大家帶來了關於vue的相關知識,其中主要詳細介紹了vue各種權限控制與管理的實現思路,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。
一、選單權限
- #選單權限:控制使用者在系統中能夠看到哪些選單項目
- #選單權限指的就是後台系統中的左側的選單欄,前端可以根據後端介面回傳的權限資料結合element-ui選單元件循環拼接而成即可,有什麼權限就展示什麼選單
- 透過vuex 持久化外掛程式(本機儲存)解決重新整理頁面功能表列不顯示問題
- 實作退出登入功能時,透過
clear()
方法清除本機資料,跳轉後通過window.location.reload()
刷新目前頁面,可實現清除vuex資料的操作
二、路由權限
- 路由權限為了防止使用者惡意透過在網址列輸入位址發生強行跳轉,可以透過動態路由對使用者權限做出相關限制,有權限則跳轉,無權限則跳轉404頁面
- 路由權限的方法需要在兩個時機呼叫
initDynamicRoutes
,分別是登入成功時和頁面建立時,否則動態路由為預設值,刷新無法存取
import Vue from 'vue' import VueRouter from 'vue-router' import Layout from '@/layout' import store from '@/store' Vue.use(VueRouter) // 动态路由规则 const tableRule = { path: '/table', name: 'table', component: () => import('@/views/table/index.vue') } const imageRule = { path: '/image', name: 'image', component: () => import('@/views/image') } const userRule = { path: '/users', name: 'users', component: () => import('@/views/users') } // 路由规则和字符串的映射关系 const ruleMapping = { table: tableRule, users: userRule, image: imageRule } //静态路由 const routes = [ { path: '/login', // name: 'login', // 这里如果有name 控制台会提示 component: () => import('@/views/login') }, { path: '/', component: Layout, children: [ { path: '', // name: 'home', component: () => import('@/views/home') }, { path: '/chart', component: () => import('@/views/chart') } ] } ] const router = new VueRouter({ routes }) //路由权限:用户登录后接口返回,存储到本地缓存 const rightList = [ { id: 1, authName: "基本页面", icon: "el-icon-connection", children: [ { id: 11, authName: "表格页面", icon: "el-icon-s-grid", path: "table", rights: ["view", "edit", "add", "delete"] }, { id: 12, authName: "素材页面", icon: "el-icon-s-marketing", path: "image", rights: ["view", "edit", "add", "delete"] } ] }, { id: 2, authName: "用户权限", icon: "el-icon-set-up", children: [ { id: 21, authName: "权限页面", icon: "el-icon-s-custom", path: "users", rights: ["view", "edit", "add", "delete"] } ] } ]; //在登录(login.vue)、页面刷新(App.vue)的时候,调用initDynamicRoutes export function initDynamicRoutes () { // 根据二级权限 对路由规则进行动态的添加 const currentRoutes = router.options.routes rightList.forEach(item => { // 如果是没有子路由的话 就直接添加进去 如果有子路由的话就进入二级权限遍历 if (item.path) { const temp = ruleMapping[item.path] // 路由规则中添加元数据meta temp.meta = item.rights currentRoutes[1].children.push(temp) } item.children.forEach(item => { // item 二级权限 const temp = ruleMapping[item.path] // 路由规则中添加元数据meta,用于按钮权限控制 temp.meta = item.rights currentRoutes[1].children.push(temp) }) }) // 添加路由规则 router.addRoutes(currentRoutes) } export default router
三、按鈕權限
- 所謂的按鈕權限是指在某個選單的介面中,我們需要根據後端返回的該角色當前操作模組中對應的按鈕權限數據,展示出可進行操作的按鈕,例如刪除,修改,增加等按鈕.
- 如果要實現按鈕的權限控制,我們需要使用vue的自訂指令去實現: 首先需要創建一個按鈕權限控制的指令,我們定義這個指令的名稱為:
v-permission
- 如果要實現按鈕的權限控制,我們需要使用vue的自訂指令去實現: 首先需要創建一個按鈕權限控制的指令,我們定義這個指令的名稱為:
- #在這個指令的內部取得到目前使用者的按鈕權限(vuex|本地快取中)資料
- 在透過
binding.value
取得到自訂制定屬性值的資料
- 在透過
- 判斷從
vuex|本機快取
取得的按鈕權限資料是否包含了自訂指令所包含的權限
- 判斷從
- 如果不包含,我們在設定
el.style.display = “none”
,或使用el.parentNode.removeChild(el)
刪除目前按鈕元素
- 如果不包含,我們在設定
<el-button v-permission="[$route.path, 'add']">添加</el-button> directives: { // 检测全选的指令 permission: { // 绑定此指令的标签插入到dom节点触发 inserted(el, bind) { // el:绑定该指令标签 // bind:对象格式 当前绑定指令标签上的数据情况 // 获取按钮上的value值,就是用户当前要使用的权限和请求的路由地址 let value = bind.value//['/user','add'] //模拟后端返回的当前角色对应的权限 let rules = { '/menu': ['add', 'edit'], "/user": [ 'edit', 'remove'], "/goods": ['add'] } // 根据访问的路由地址获取该模块的操作权限 let allow = rules[value[0]] // 检测当前操作是否合法 if (!allow.includes(value[1])) { // 不合法隐藏操作按钮 el.style = "display:none" } } } }
四、資料權限
-
資料權限
就是不同的角色使用者看到的表格資料是不一樣的 - 例如張三是專案經理就可以看到某一個業務表格中的所有資料和欄位資訊
- 李四是一般員工只能看到表格中自己的資料
- 程式碼實作: 前端在請求頭統一封裝,攜帶使用者訊息,最後由後端偵測該使用者權限解析回傳對應的資料即可;
import axios from 'axios' import router from '@/router' const request = axios.create() // 映射 const actionMapping = { get: 'view', post: 'add', put: 'edit', delete: 'delete' } // request.defaults.baseURL = 'http://127.0.0.1:7001' // 注释掉之后调的接口将是Mock数据 // 请求拦截器 request.interceptors.request.use(req => { // console.log(req.url) // console.log(req.method) if (req.url !== '/login' && req.url !== '/roles') { // 不是登录的请求 也不是获取权限的请求 则在请求头中加入token 不知道如何使用Mock来验证请求头中的token 故此处注释 // req.headers.Authorization = sessionStorage.getItem('token') const action = actionMapping[req.method] // 判断非权限范围内的请求 // console.log(router) const currentRight = router.currentRoute.meta // console.log(currentRight) if (currentRight && currentRight.indexOf(action) === -1) { // 没有权限 alert('没有权限') return Promise.reject(new Error('没有权限')) } } return req }) export default request
推薦學習:《vue影片教學》
以上是詳解vue各種權限控制與管理的實現思路的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

Vue.js是一個漸進式的JavaScript框架,適用於構建高效、可維護的前端應用。其關鍵特性包括:1.響應式數據綁定,2.組件化開發,3.虛擬DOM。通過這些特性,Vue.js簡化了開發過程,提高了應用性能和可維護性,使其在現代Web開發中備受歡迎。

Vue.js和React各有優劣,選擇取決於項目需求和團隊情況。 1)Vue.js適合小型項目和初學者,因其簡潔和易上手;2)React適用於大型項目和復雜UI,因其豐富的生態系統和組件化設計。

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具