element-admin通過後端動態路由表實現使用者許可權控制(一)
實現效果描述
最近大家都說牛市來了,我也在瘋狂的理財,主要買了一些基金,然後做了系統,可以實時檢視基金漲跌情況,同事覺得好用,叫我給他開賬戶,於是我就開始研究起了許可權來了,最後實現效果如下:
A使用者左側導航條:
B使用者左側導航條
實現方案
後端返回路由結構如下:
"user_router": [
{
"component": "/dashboard/index",
"icon": "form",
"id": 14,
"name": "dashboard",
"path": "dashboard",
"title": "\u9996\u9875",
"uid": 5
},
{
"component": "/alipay/fund",
"icon": "form",
"id": 15,
"name": "alipay",
"path": "alipay",
"title": "\u652f\u4ed8\u5b9d",
"uid": 5
}
]
修改專案中的permission.js
新增如下程式碼:
// get user info
const res = await store.dispatch('user/getInfo')
store.dispatch('user/generateRouter', res.user_router).then(() => {
const routers = store.getters.addRouters
router.addRoutes(store.getters.addRouters)
routers.forEach((item, index) => {
router.options.routes[index] = item
})
next({
...to,
replace: true
})
})
插入位置為:
修改 store/modules/user.js,在action中新增generateRouter函式,如下程式碼
generateRouter({
commit
}, routers) {
return new Promise((resolve) => {
const accessedRouters = formatRouter(routers)
commit('SET_ROUTERS', accessedRouters);
resolve();
})
},
其中fomatRouter函式程式碼為:
const formatRouter = (routers) => {
const formatRouters = [];
routers.forEach(router => {
const path = router.path;
const name = router.name;
const title = router.title;
const component = router.component;
const icon = router.icon;
const formatRouter = {
path: '/',
component: Layout,
redirect: '/' + name,
children: [{
path: path,
name: name,
component(resolve) {
require(["@/views" + component], resolve)
},
meta: {
title: title,
icon: icon
}
}]
}
formatRouters.push(formatRouter)
})
另外在getDefaultState函式中新增如下兩個變數
routers: constantRoutes,
addRouters: []
位置如下:
在getters.js中新增如下:
addRouters: state => state.user.addRouters
以上程式碼均在vue-element-admin程式碼庫基礎上修改的
總結
- 參考思路https://juejin.im/post/591aa14f570c35006961acac
- 難點,之前以為直接將路由物件拼接到addRoutes函式中即可,實際上是需要對從後端取過來的資料進行format,否則不生效
- 個人是前端後端一起做,後端用的python flask框架,就考慮了後端用資料庫儲存路由表
有問題歡迎各位諮詢,這是我的公眾號,大家可以關注一下:
相關文章
- PostgreSQL_通過schema控制使用者許可權SQL
- Vue | 自定義指令和動態路由實現許可權控制Vue路由
- Laravel實現許可權控制Laravel
- 使用動態路由實現許可權管理路由
- **CodeIgniter通過hook的方式實現簡單的許可權控制Hook
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 通過 VirtualApp 實現免 Root 許可權 HookAPPHook
- 前端如何配合後端完成RBAC許可權控制前端後端
- 通過 recompose 實現 react router4 許可權React
- MySQL使用者許可權控制一例MySql
- [WCF許可權控制]通過擴充套件自行實現服務授權[提供原始碼下載]套件原始碼
- 後端基於方法的許可權控制--Spirng-Security後端
- spring aop實現許可權控制,路徑控制Spring
- SpringBoot(一) 如何實現AOP的許可權控制Spring Boot
- [WCF許可權控制]透過擴充套件自行實現服務授權套件
- 基於Vue2.0實現後臺系統許可權控制Vue
- Spring Security實現基於RBAC的許可權表示式動態訪問控制Spring
- 關於動態許可權
- android動態許可權到自定義許可權框架Android框架
- 前端許可權控制系統的實現思路前端
- Spring Security實現統一登入與許可權控制Spring
- 使用者許可權繼承另一使用者的許可權繼承
- SpringBoot整合SpringSecurityOauth2實現鑑權-動態許可權Spring BootGseOAuth
- Docker安全:通過Docker提升許可權Docker
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- Nestjs RBAC 許可權控制管理實踐(一)JS
- Elasticsearch 許可權控制Elasticsearch
- Vue 前端應用實現RBAC許可權控制的一種方式Vue前端
- SpringMVC使用攔截器實現許可權控制SpringMVC
- ASP.Net實現使用者許可權管理ASP.NET
- SQLServer控制使用者訪問許可權表SQLServer訪問許可權
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- Atlas 2.1.0 實踐(4)—— 許可權控制
- vue後臺管理系統許可權控制思考與實踐Vue
- Vue管理系統前端系列六動態路由-許可權管理實現Vue前端路由
- Spring Boot動態許可權變更實現的整體方案Spring Boot
- 最新版 Spring Security,該如何實現動態許可權管理?Spring
- 一個用 Laravel5.5 自己實現的許可權後臺Laravel