q版设计网站,wordpress怎么才能快,外贸网站策划,桂林网站优化注意事项一.权限的概念 前端权限分为页面权限、按钮权限、API权限。
二.页面权限的实现过程 ①用户登录进去调用获取用户信息接口#xff0c;后端会给我们返回一个权限标识符 ②在获取到数据之后,我们就要判断用户能访问到哪些页面,我们可以在vuex中permission模块中的action…一.权限的概念 前端权限分为页面权限、按钮权限、API权限。
二.页面权限的实现过程 ①用户登录进去调用获取用户信息接口后端会给我们返回一个权限标识符 ②在获取到数据之后,我们就要判断用户能访问到哪些页面,我们可以在vuex中permission模块中的action中有个filterRoutes方法将路由的name和权限标识过滤,然后将返回的动态路由和静态路由结合起来保存在vuex ③ 使用Router.addRoutes方法,将动态路由添加到路由表里,然后跳转到对应的地址next(to.path) ④ 最后在vuex中取routes渲染在左侧菜单(routes是保存的静态路由) 这里会出现bug
addRoutes bug处理 当添加路由addRoutes的时候正常点击是没问题的但是刷新一次页面那么动态添加的路由就会失效用getRoutes() 打印出来看的时候确定路由已经添加进去了所以这个原因应该是当你执行到addRoutes时路由要添加进去了但是路由不是响应式的从执行循序来看地址栏快于路由的添加那找不到这个路径了就只能白屏了除非设置了404的页面
// 记录路由
let hasRoles true;
// 白名单(所有人都可以访问的名单)
const whiteList [/login];router.beforeEach(async(to,from,next){let userInfo getStorage(userInfo)?.accountIdif(userInfo){// 如果有tokenif(to.path/login){// 如果是登录状态 并且进入的页面是登录页面 则跳到首页next({path:/})}else{// 获取处理好的路由let routes await store.dispatch(/user/getRoutes)// 路由添加进去了没有及时更新 需要重新进去一次拦截if(hasRoles){routes.forEach(itemrouter.addRoute(item));hasRoles false;// 这里相当于push到一个页面 不在进入路由拦截next({...to,replace:true})}else{next() // 如果不传参就会重新执行路由拦截。重新进到这里}}}else{if(whiteList.includes(to.path)){next();}else{next(/login?redirect${to.path});}}
})
这样就完美解决这个bug了
三.按钮权限的实现过程 ①首先用points:[ ‘’ , ’’ ]获取vuex中的用户信息控制权限的所有标识, 然后全局混入Vue.mixin一个公用的方法checkPermission,在方法中传入一个固定的按钮权限标识 ②用数组里的some方法查看points是否有传入字段是相同的 ,有则返回true,无则返回false
四.ApI权限的实现 api权限一般都是由后端来实现
五.只改前端不改后端如何做权限 方案1前端控制页面访问权限后端不做接口权限控制。 - 绕过前台可直接访问接口前端权限控制存在的安全隐患。 方案2前端不做页面控制有后端进行权限控制。- 后端进行权限控制基本上能避免绕过前台接口调用接口的问题但是能看到不能访问一些菜单给用户的体验不太好。