国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue-Access-Control 前端用戶權限控制解決方案

2024-05-06 15:23:54
字體:
來源:轉載
供稿:網友

Vue-Access-Control是一套基于Vue/Vue-Router/axios 實現的前端用戶權限控制解決方案,通過對路由、視圖、請求三個層面的控制,使開發者可以實現任意顆粒度的用戶權限控制。

整體思路

會話開始之初,先初始化一個只有登錄路由的Vue實例,在根組件created鉤子里將路由定向到登錄頁,用戶登錄成功后前端拿到用戶token,設置axios實例統一為請求headers添加{"Authorization":token}實現用戶鑒權,然后獲取當前用戶的權限數據,主要包括路由權限和資源權限,之后動態添加路由,生成菜單,實現權限指令和全局權限驗證方法,并為axios實例添加請求攔截器,至此完成權限控制初始化。動態加載路由后,路由組件將隨之加載并渲染,而后展現前端界面。

為解決瀏覽器刷新路由重置的問題,拿到token后要將其保存到sessionStorage,根組件的created鉤子負責檢查本地是否已有token,如果有則無需登錄直接用該token獲取權限并初始化,如果token有效且當前路由有權訪問,將加載路由組件并正確展現;若當前路由無權訪問將按路由設置跳轉404;如果token失效,后端應返回4xx狀態碼,前端統一為axios實例添加錯誤攔截器,遇到4xx狀態碼執行退出操作,清除sessionStorage數據并跳轉到登錄頁,讓用戶重新登錄。

最小依賴原則

Vue-Access-Control的定位是單一領域解決方案,除了Vue/Vue-Router/axios之外沒有其他依賴,理論上可以無障礙的應用到任何有權限控制需求的Vue項目中,項目基于webpack 模板開發構建,大多數新項目可以直接基于檢出代碼繼續開發。需要說明的是,項目額外引入的Element-UI和CryptoJS僅用于開發演示界面,他們不是必須且與權限控制毫無關系,項目應用中可以自行取舍。

目錄結構

src/ |-- api/     //接口文件 |  |-- index.js    //輸出通用axios實例 |  |-- account.js   //按業務模塊組織的接口文件,所有接口都引用./index提供的axios實例 |-- assets/ |-- components/ |-- router/ |  |-- fullpath.js   //完整路由數據,用于匹配用戶的路由權限得到實際路由 |  `-- index.js   //輸出基礎路由實例 |-- views/ |-- App.vue ·-- main.js

數據格式約定

路由權限數據必須是如下格式的對象數組,id和parent_id相同的兩個路由具有上下級關系,如果希望使用自定義格式的路由數據,需要修改路由控制的相關實現,詳見路由控制數據格式約定

[ {  "id": "1",  "name": "菜單1",  "parent_id": null,  "route": "route1" }, {  "id": "2",  "name": "菜單1-1",  "parent_id": "1",  "route": "route2" } ] 

 資源權限數據必須是如下格式的對象數組,每個對象代表一個RESTful請求,支持帶參數的url,具體格式說明見請求控制

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 彝良县| 桦川县| 长武县| 景洪市| 康马县| 土默特右旗| 邛崃市| 梧州市| 怀远县| 荆州市| 三河市| 夏河县| 临泽县| 金乡县| 泌阳县| 增城市| 禄丰县| 夏邑县| 长沙县| 巍山| 勐海县| 皋兰县| 曲周县| 江安县| 肃北| 金门县| 根河市| 英山县| 尼勒克县| 紫云| 隆林| 安西县| 且末县| 砚山县| 宝坻区| 昌邑市| 武义县| 金堂县| 上林县| 甘南县| 青阳县|