本文主要介紹vue-admin-模板權限管理,下面一起看看vue-admin-模板權限管理相關資訊。
在vue-admin-template角色權限設置(1)中提到了如何根據用戶角色控制訪問,但是在項目的實際使用中發現了一些存在的問題。下面主要針對這些存在的問題進行修改和完善。
1頁面刷新后頭像等個人信息消失的原因:頁面登錄成功后,項目通過getinfo方法獲取個人信息并存儲在vuex中,但頁面刷新后,vuex中的數據會丟失。這是因為js代碼運行在內存中,代碼運行時的所有變量和函數也都存儲在內存中。刷新頁面后,之前應用的內存被釋放,腳本代碼被重新加載,變量被重新分配,所以這些數據如果要存儲的話,必須外部存儲。解決方案:獲取數據后,在存儲器中保存數據的副本。這里需要注意的是:盡量不要在localstorage中存儲過多的數據,否則會影響頁面加載性能。從 @/api/用戶 從 amp導入{ gettoken,settoken,removetoken };;@/utils/auth ;從 amp導入{ resetrouter };;@/路由器 const getdefaultstate == { return {//使用localstorag: g: local storage . getitem( ;姓名和名稱。;)刷新后還存在?json . parse(local storag: ; 、avatar: local storage . getitem( ;阿凡達 ) ?json . parse(local storag: ; 、rol: local storage . getitem( ;角色 ) ?json . parse(local storag:[]} }常量統計e = getdefaultstateconst mutations = { r:(state)= { object . assign(stat:(stat:(stat:(state,avatar)= { state . avatar = avatar } } const actions = {//用戶登錄登錄({ commit },userinfo) { const { username,password } = userinfo返回新的承諾((resolve,reject){ log in然后(response = { const { data } =響應提交( 設置令牌 ,data . token)settoken(data . token)resolve})。catch(error = { reject(error)} })},//獲取用戶信息getinfo({ commit,state }){ return new promise((resolve,reject) = { getinfo(state.token)。然后(response = { const { data } = response;如果(!數據){退貨拒絕( 驗證失敗,請重新登錄! )} const {name,roles,avatar } = data//在lo備份個人信息。本地存儲。;角色 ,json。stringify (roles))本地存儲。;角色 ,json。stringify (roles))本地存儲。;阿凡達 ,json。stringify(頭像))如果(!roles | | roles . length = 0){ reject( ;您不是有效身份! )}//在local storage if(roles . includes( ;商店經理 )){本地存儲。setitem( ;許可 ,json。stringify([ ;添加 , 編輯和刪除。;]);} else if(roles . includes( ;收銀員 )||角色. includes( ;技術員和技術員。;)||角色. includes( ;造型師 ){本地存儲。setitem( ;許可 ,json。stringify([]);}提交( set _ name ,name)提交( 設置角色 角色)提交( 設定_頭像 ,頭像)解析(數據)})。catch(error = { reject(error)} })},//用戶注銷注銷({ commit,state }){ return new promise((resolve,reject) = {logout (state。token)。然后(= { remove token//must remove token first reset router//記得清空localstorage。remove item( ;許可 ).localstorage.removeitem;姓名和名稱。;)local storage . remove item( ;角色 )local storage . remove item( ;阿凡達 )提交( 重置狀態 )resolve })。貓ch(error = { reject(error)} })},//移除令牌resettoken({ commit }){ return new promise(resolve = { remove token//必須先移除令牌//記得清除local storage . remove item( ;許可 )local storage . remove item( ;姓名和名稱。;)local storage . remove item( ;角色 )local storage . remove item( ;阿凡達 ).提交( 重置狀態 )resolve} } export default {namespac: true,state,mutations,actions}這樣刷新后vuex中的值依然存在~
2.頁面刷新后,動態路由無法跳轉到/。一方面,頁面刷新后對應的vuex的值失效,另一方面,即使該值仍然有效,但是在addroutes動態添加路由之前,從靜態找到頁面,導致一直跳轉到404。解決方案:路線可以存儲在localstorage中。因為之前已經持久化了角色,所以可以在路由預保護中直接處理刷新情況。主要思想是在路由中加入動態路由表后,404路由也是動態加入的!需要注意的是,多次調用router.addroutes方重復添加路由,并警告路由名重復,可以重新打包一個方法。將router/index.js中的addroutes方法重新打包//解決路由名重復的問題。$ add routes = params = { router . match: router.options.routes//key代碼})。matcherrouter . add routes(params);};刪除*查找404 { path : ;* ,redirect : ;/404 ;,hidden: true}在路由器/index.js的靜態路由中在rc/permission.js中,刷新情況在router.before each (async (to,from,next) = { //啟動進度條nprogress.start //設置頁面標題document . title = get page title(to . meta . title)//判斷用戶是否已經登錄const hastoken = gettokenif(hastoken){ if(to . path = = = ;/登錄 ){ //如果登錄了,下一步重定向到首頁({ path : ;/ ;}) nprogress。done} else {//添加routes后第一次訪問添加的路由時,屏幕會是空白的,因為剛添加routes//后就立即訪問添加的路由,但是此時添加routes的執行還沒有結束,所以可以 找不到新添加的路由,導致屏幕空白。所以你需要再次訪問路線。//此時將使用next ({… to,replac: true })來確保在添加路由時,已經完全加載了動態添加的路由。//replac: true in next({…to,replac: true })只是一個設置信息,告訴vue在這個操作之后,你可以 t通過瀏覽器的后退按鈕返回到以前的路線。//通過getinfo判斷用戶是否獲得了權限角色const has roles = store . getters . roles store . getters . roles . length 0;if (hasroles) {//如果正在刷新if (store。狀態。許可。路線。length = = 0){//生成可訪問的路由const accessroutes = await store。派遣( 許可/生成路線。;,存儲。getters.roles)根據角色;//動態添加路由路由器呃。$ add routes(acc: ;* 、redirect: ;/404 ;,hidd:真})console . log(router . options . routes)下一個({...對,replac:真});} else { next} } else { try {//get userinfo//注意:角色必須是數組形式,比如[ ;行政及管理。;]或者,[ ;開發商 ,編輯 ] const {roles} = awaitstore。派遣( 用戶/getinfo ;)//根據角色生成可訪問的路由const access routes = awaitstore。派遣( 許可/生成路線。;,角色);//動態添加路由路由器。$ add routes(acc: ;* 、redirect: ;/404 ;,hidd:為真})//確保addroutes已完成//將其設置為真,以便導航不會留下歷史記錄({...對,replac:是真的});} catch (error) { //刪除令牌并轉到登錄頁面to重新登錄等待store.dispatch。;用戶/重置令牌 )message . error(error | | ;有錯誤 )下一個(`/登錄?redirect = $ { to . path } `)n progress . done} } } else {/*沒有標記*/ if (whitelist.indexof(to.path)!== -1) { //在免費登錄白名單中,直接進入next } else { //其他沒有訪問權限的頁面被重定向到登錄頁面。下一個(`/登錄?重定向= $ {到。path }`) nprogress。done} })it ;在這里刷新沒有問題!!結束了。
標簽:
路由頁面
了解更多vue-admin-模板權限管理相關內容請關注本站點。
常見的電腦主板故障代碼有哪些問題(常見的電腦主板故障代碼有哪些圖片)
可移動磁盤損壞如何修復,可移動磁盤壞了如何修復
qq空間中的訪問權限設置方法在哪里(qq空間的訪問權限怎么設置)
win7怎樣分區,win7如何分磁盤區域
win10將日歷嵌入桌面(win 10如何添加日歷在桌面)
vue-admin-template權限管理(vuetemplate admin)
microsoft手機怎么樣,微軟手機怎么樣
雷電模擬器下載沒反應(雷電模擬器下載了軟件打不開什么問題)
vivo手機怎么設置呼吸燈
傳奇手游變態版
雙固態硬盤的好處和壞處,固態硬盤的好處和壞處
二手電腦估價和成交價,回收二手電腦估價
SSD硬盤壽命,固態硬盤使用壽命一般多久
硬盤有問題死機(硬盤故障導致死機)
時空光年老照片修復免費版,老照片翻新修復免費軟件
適合新手的重裝win10教程步驟圖(適合新手的重裝win10教程步驟有哪些)
愛奇藝會員怎么共享賬號登錄(愛奇藝會員怎么共享賬號給別人用)
電腦桌面顏色發白(電腦顯示顏色泛白)
字體 win7(win7系統字體在哪個文件夾)
iphone怎么投屏到macbook上(蘋果如何投屏到macbook使用)