vue项目权限管理

89 篇文章 7 订阅
1 篇文章 0 订阅

1.权限分类

权限管理主要分为后端权限和前端权限。后端权限是关键,主要控制对数据库的操作;前端权限为辅,主要表现在对界面显示、路由导航、按钮显示操作与否、无效请求前端拦截和响应拦截提升用户体验等。

2.前端权限主要思路

    菜单的控制:在登录成功后,会得到后端提供的权限数据。前端根据权限数据,展示对应的菜单;
    界面的控制

        点击根据用户数据显示的对应菜单,显示不同界面
        如果用户没有登录,手动在地址栏敲入某个需要权限的界面的地址, 则需要跳转到登录界面
        如果用户已经登录,如果手动敲入非权限内的地址,则需要跳转404 界面
    按钮的控制:在某个菜单的界面中, 还得根据权限数据, 展示出可进行操作的按钮,比如删除, 修改, 增加
    请求和响应的控制(接口):如果用户通过非常规操作, 比如通过浏览器调试工具将某些禁用的按钮变成启用状态, 此时发的请求, 也应该被前端所拦截


3.Vue的权限控制实现

说明:使用mock模拟后端返回数据

path代表路由地址,authName代表菜单名,children代表子菜单,rights代表该菜单下该用户拥有的权限

mockjs配置:

https://blog.csdn.net/qq_34569497/article/details/132496048

import Mock from 'mockjs'

const menuList = [
    {'id': 1, path:'/uploadSpec','authName': "上传spec", icon: 'User', children:[], rights:['view','add','edit','delete']},
    {'id': 2, path:'/showSpec', 'authName': "Spec预览", icon: 'DataAnalysis',children:[], rights:['view','add','edit','delete']},
    {'id': 3, path:'/generateTxt', 'authName': "生成测试数据", icon: 'DataAnalysis',children:[], rights:['view','add','edit','delete']},
    {'id': 4, path:'/generateCronjob', 'authName': "生成转码程序", icon: 'Promotion',children:[], rights:['view','add','edit','delete']},
    {'id': 5, path:'/pdfCompare', 'authName': "PDF文档对比", icon: 'DocumentCopy',children:[], rights:['view','add','edit','delete']},
    {'id': 6, path:'/resourceUpdate', 'authName': "资源更新管理", icon: 'Management',children:[], rights:['view','add','edit','delete']},
    {'id': 7, path:'/generateTestCase', 'authName': "自动生成ST/SIT案例", icon: 'Files',children:[], rights:['view','add','edit','delete']},
    {'id': 8, path:'/userManagement', 'authName': "用户管理", icon: 'User', rights:['view']},
    {'id': 9, path:'/roleManagement', 'authName': "角色管理", icon: 'Stamp', rights:['view']},
]

Mock.mock("/user/login", Mock.mock({
    "code": 200,
    "success": true,
    "data": {
        "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOiJhZG1pbiIsIm5pY2tOYW1lIjoi6LaF566hIiwiaWNvbiI6IiIsInJvbGVJZCI6MSwic3ViIjoiYWRtaW4iLCJleHAiOjE2OTI3NzMzNTMsImp0aSI6ImZkNmVkOWZiMjdiYzQxODg5OWRmYmYzNzhlMTMzZmQ0In0.APGpN-i2edKwPQA52LP10aDEM2DZi7G71k8f_njGcpE"
    }
})
)

Mock.mock("/user/me", Mock.mock({
    "code": 200,
    "success": true,
    "data": {
        "id": 1,
        "userName": "admin",
        "nickName": "超管",
        "icon": "",
        "roleId": 1,
        "menuList": menuList
    }
})
)

Mock.mock("/role/delete", Mock.mock({
    "code": 200,
    "success": true,
})
)

 

3.1菜单权限

后端(mock)提供菜单权限数据,根据数据渲染一级和二级菜单,并将数据存到vuex中;

权限数据rightList: setRightList(登录成功后将数据设置到vuex中)
            Home.vue中引入mapState,并在computed中映射到rightList,并将rightList设置到menuList中
            刷新数据后菜单栏消失,将vuex中数据存到localStorage或者sessionStorage中
            退出登录后删除sessionStorage和vuex中的数据(刷新vuex数据,跳转页面后,window.location.reload())

参考以下:

vue权限管理——菜单权限设置__Jyann_的博客-CSDN博客

3.2界面权限(路由权限):

判断用户是否登录:token
            什么时机判断登录:路由全局守卫,to.path进行判断 === "/login"直接next(); 否则需要获取token,如果token不存在,跳转到登录页,有则next()
            手动在地址栏敲入地址:没有权限也会显示该界面。
                需要权限控制的页面,使用动态路由进行管理
                登录成功后,根据登录后的rightList用户拥有的权限,动态添加路由规则
                对路由规则和权限字符串进行映射
            router.js中导出,initDynamicRoutes()方法,登录后导入该方法,并遍历rightList,并将路由添加到Home页面的children中

动态路由在刷新后,又不存在了,但是在登录后点刷新操作不会再次登录,所以需要将在App.vue中created()中导入并执行initDynamicRoutes

 详细见以下:

vue3动态路由设置__Jyann_的博客-CSDN博客

3.3 按钮权限:


            按钮也是根据数据显示,数据中有rights属性定义该用户拥有的所有权限。
            实现:使用自定义指令。
                permission.js中created()中方法实现
                initDynamicRoutes给用户对应的router中动态添加meta元数据后,permission.js中通过router.currentRoute就可以获取
                对比指令中指定的role和rightList中的role相同则像有权限,不同则删除
                可禁用元素或者删除

参考我以下文章:

vue权限管理——按钮控制__Jyann_的博客-CSDN博客

3.4(请求和响应控制)接口权限:


            登录后,每次发起请求前携带请求头token
            根据用户权限数据,判断为非权限请求,则拒绝响应:
                判断当前请求的行为
                    restful请求风格
                        get请求-》view
                        post请求-》add
                        put请求-》edit
                        delete请求-》delete请求
                const actionMapping = {
                    'get':'view',
                    'post':'add',
                    'put':'edit',
                    'delete':'delete',
                }
                action中数据和currentRoute中数据不匹配则拒绝请求,return new Promise(new Error("没有操作权限"))
            响应控制:请求返回401,token无效或者后期,则需要跳转到登录界面

详细参考我以下文章:

vue权限管理——请求和响应权限控制__Jyann_的博客-CSDN博客

4.小结 

前端权限控制必须根据后端返回数据实现

菜单控制:vuex和sessionStorage数据必须一致
    界面控制:
        路由导航守卫,防止跳过登录界面
        动态路由可以让不存在权限的界面的路由根本不存在
    按钮控制:
        路由规则中增加路由元数据meta
        通过路由对象可以得到当前路由规则,以及存储在此规则中的meta数据
        自定义指令可以方便的实现按钮控制
    请求和响应控制:
        请求和响应拦截器的使用
        请求方式行为的映射关系,需要请求api规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
物流管理系统是一个集成了物流信息的处理、调度、跟踪和管理功能的应用系统。SpringBoot是一个快速开发框架,提供了便捷的配置和快速构建应用程序的能力。Vue是一个流行的前端框架,用于构建用户界面。 为了实现物流管理系统,我们可以使用SpringBoot构建后端,使用Vue构建前端。在后端方面,我们可以使用SpringBoot提供的特性来管理用户账户、管理物流订单、管理配送人员等等。可以使用Spring Security进行身份验证和授权控制,保证系统的安全性。使用Spring Data JPA可以方便地与数据库交互,存储和查询物流信息。同时可以使用Spring Boot的集成测试功能进行测试,保证系统的稳定性。 在前端方面,使用Vue来构建用户界面,可以借助Vue Router实现路由管理,实现用户之间的页面跳转。同时使用Vue的组件化开发方式,可以将不同的功能模块拆分成独立的组件进行开发,提高代码的复用性和可维护性。同时,可以使用Vue的状态管理工具Vuex,实现不同组件之间的状态共享和管理。在用户界面设计方面,可以使用Vue的UI框架Element UI,提供美观、易用的UI组件。 总的来说,使用SpringBoot和Vue来开发物流管理系统可以提高开发效率和系统性能。SpringBoot提供了稳定可靠的后端框架,Vue提供了灵活方便的前端框架,两者结合可以实现一个高效、功能完善的物流管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值