本文主要介绍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使用)