【面试题】:前端怎么实现权限设计及遇到的bug

简介: 前端怎么实现权限设计及遇到的bug

一.权限的概念

前端权限分为页面权限、按钮权限、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')?.accountId
    if(userInfo){
   
        // 如果有token
        if(to.path==='/login'){
   
            // 如果是登录状态 并且进入的页面是登录页面 则跳到首页
            next({
   path:'/'})
        }else{
   
            // 获取处理好的路由
            let routes = await store.dispatch('/user/getRoutes')
            // 路由添加进去了没有及时更新 需要重新进去一次拦截
            if(hasRoles){
   
                routes.forEach(item=>router.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,前端不做页面控制,有后端进行权限控制。- 后端进行权限控制,基本上能避免绕过前台接口调用接口的问题,但是能看到不能访问一些菜单,给用户的体验不太好。
相关文章
|
23天前
|
前端开发 JavaScript 网络协议
前端最常见的JS面试题大全
【4月更文挑战第3天】前端最常见的JS面试题大全
45 5
|
3月前
|
程序员
面试高频题:开发人员说不是bug,测试如何答复?
面试高频题:开发人员说不是bug,测试如何答复?
|
3月前
|
设计模式 前端开发 算法
No210.精选前端面试题,享受每天的挑战和学习
No210.精选前端面试题,享受每天的挑战和学习
No210.精选前端面试题,享受每天的挑战和学习
|
3月前
|
消息中间件 缓存 前端开发
No209.精选前端面试题,享受每天的挑战和学习
No209.精选前端面试题,享受每天的挑战和学习
No209.精选前端面试题,享受每天的挑战和学习
|
3月前
|
前端开发 JavaScript Java
No208.精选前端面试题,享受每天的挑战和学习
No208.精选前端面试题,享受每天的挑战和学习
No208.精选前端面试题,享受每天的挑战和学习
|
3月前
|
存储 缓存 前端开发
No198.精选前端面试题,享受每天的挑战和学习
No198.精选前端面试题,享受每天的挑战和学习
|
3月前
|
存储 JSON 前端开发
No206.精选前端面试题,享受每天的挑战和学习
No206.精选前端面试题,享受每天的挑战和学习
No206.精选前端面试题,享受每天的挑战和学习
|
1月前
|
存储 缓存 监控
2024年春招小红书前端实习面试题分享
春招已经拉开帷幕啦! 春招的拉开,意味着新一轮的求职大战已经打响,希望每位求职者都能充分准备,以最佳的状态迎接挑战,找到心仪的工作,开启职业生涯的新篇章。祝愿每位求职者都能收获满满,前程似锦!
76 3
|
1月前
|
前端开发 数据可视化 安全
2024金三银四必看前端面试题!简答版精品!
2024金三银四必看前端面试题!2w字精品!简答版 金三银四黄金期来了 想要跳槽的小伙伴快来看啊
86 3
|
2月前
|
UED
面试题7:你写的bug别人都看不懂怎么办?
面试题7:你写的bug别人都看不懂怎么办?
面试题7:你写的bug别人都看不懂怎么办?