【面试题】:前端怎么实现权限设计及遇到的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,前端不做页面控制,有后端进行权限控制。- 后端进行权限控制,基本上能避免绕过前台接口调用接口的问题,但是能看到不能访问一些菜单,给用户的体验不太好。文章来源地址https://www.toymoban.com/news/detail-667143.html

到了这里,关于【面试题】:前端怎么实现权限设计及遇到的bug的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试:遇到bug怎么分析,这篇文章值得一看

    为什么定位问题如此重要? 可以明确一个问题是不是真的“bug” 很多时候,我们找到了问题的原因,结果发现这根本不是bug。原因明确,误报就会降低 多个系统交互,可以明确指出是哪个系统的缺陷,防止“踢皮球”,提高问题解决的效率 增强开发对测试的信任度,沟通更

    2024年02月08日
    浏览(27)
  • 十一、做高并发内存池项目过程中遇到的bug以及调试bug的方法和心得

    第一个bug是内存问题,程序直接崩溃,问题出现在:GetOneSpan函数中的切分span的时候结尾的span1的next没有置空。 第二个bug是还小内存块给span的时候找不到小内存所属的span,原因是NewSpan函数中的一个if分支返回前没有把id和span*的映射关系存好。 修bug前: 修bug后: 第三个bug出

    2024年02月10日
    浏览(31)
  • 遇到一个同事,喜欢查其他同事的BUG,然后截图发工作大群里,还喜欢甩锅,该怎么办?...

    职场上都有哪些奇葩同事? 一位网友吐槽: 遇到一个同事,喜欢查同级别同事的bug,截图发工作群,甚至发大群里,还喜欢甩锅,该怎么办? 职场工贼,人人喊打,网友们纷纷给出了自己的应对之策。 有人说,就在群里回一个大拇哥。 有人说,说明他工作不饱和,告诉领

    2024年02月05日
    浏览(42)
  • Jenkins Pipline使用SonarScanner 检查 VUE、js 项目 中遇到的Bug

    在 Jenkins 上使用 Pipline 进行集成,利用 SonarScanner 做静态代码扫描的过程中,遇到了几个问题,这里记录了一点解决办法。 自动安装 SonarScanner 插件,在 Pipline 脚本中使用官方 wiki 中说明的脚本: 但是在扫描的时候总是报错,可以看出是语法错误: 因为在 stage 里面不是用

    2024年02月16日
    浏览(34)
  • 记录--前端实习生的这个 bug 被用做了一道基础面试题

    测试发现了一个问题,简单描述问题就是通过函数删除一个数组中多个元素,传入的参数是一个数组索引。 然后发现实际效果有时删除的不是想要的内容。 具体  Bug  代码实现: 上面代码出现问题的原因是 splice 会改变原始数组的,然后导致索引偏移,不知道有没有同学出过

    2024年02月05日
    浏览(36)
  • Golang做项目遇到bug invalid character ‘<‘ looking for beginning of value

    1、bug描述     事先在resis中存入哈希: 创建User结构体,拥有3个字段及对应json tag 通过查询redis得到这个user的哈希value为res,为string类型“\\\"userId\\\":100,\\\"userPwd\\\":\\\"123456\\\",\\\"userName\\\":\\\"scott\\\"\\\" 我在把这个字符串转成[]byte后使用json.Unmarshal()来反序列化,把解析后的数据赋给user实例 运行

    2024年02月11日
    浏览(41)
  • 【菜狗学前端】npm i -g nodemon 遇到的下载卡住及运行权限问题解决记录

    nodemon作用:用node环境运行js文件时可以实时刷新运行出结果 (即修改js代码后不需再手动重新运行js文件) 卡住位置:reify:semver: timing reifyNode:node_modules/nodemon Completed 原因:跟镜像源为淘宝镜像源有关 解决方法: 1.还原默认镜像 源 2.检查是否还原成功 显示为https://registry.npmjs

    2024年04月15日
    浏览(52)
  • 前端基础积累_新技术_Vue_React_H5_奇怪的BUG_面试_招聘

    前几天在博客园收到了一封来自出版社的消息,说看到原来很久之前写的 VueJS 源码分析的文章 希望能够联系他们出版社去写书。这样的事情虽然在博客园是会经常发生的,但是这也让我意识到了,多多写高质量的文章能够给 coder 带来很多的 所谓的好处,不管是短期的技术积

    2024年02月13日
    浏览(32)
  • 将前端vue项目部署到服务器上(详细教程&各种bug解决办法)

    1、修改文件中的配置(解决打包后点击index.html空白页的情况) 将vue.config.js下的publicPath从 \\\'/\\\' 改成 \\\'./\\\' 2、将写好的项目打包 正常的命令是npm run build, 如果是使用vue-admin-template则使用npm run build:prod 3、使用Xftp将打包后的dist传到服务器上,最好传到root目录下 4、 在服务器上安

    2024年02月13日
    浏览(32)
  • 解决了项目中几个比较搞心态的bug(前端vue、小程序)

    正常keep-alive的使用便可以做项目的缓存,但是我们的项目很不正常 项目是属于动态缓存,动态缓存有一个弊端 举个栗子: a组件为设置了需要缓存的页面; b组件为设置了需要缓存的页面; c组件为设置了不需要缓存的页面。 假如:从a组件跳转到b组件,相当于缓存页面跳转

    2024年02月15日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包