当前位置: 首页 > news >正文

51、项⽬中的权限管理怎么实现的

答:权限管理有三个很重要的模块;

(1)⽤⼾模块:可以给⽤⼾分配不同的⻆⾊

(2)⻆⾊模块:可以授于⽤⼾不同的⻆⾊,不同的⻆⾊有不同权限

(3)权限模块:⽤于管理系统中的权限接⼝,为⻆⾊提供对应的权限

具体实现步骤

根据⽤⼾管理中给⽤⼾分配⻆⾊的不同,就有对应的菜单权限。

(1)当⽤⼾登录后,后端会把⽤⼾token和相应的⽤⼾信息(⽤⼾名/菜单权限),返回给前端,前端会先把 ⽤⼾信息先进⾏保存。

(2)在routes.js路由⽂件中把路由拆分为静态路由和动态路由,在vuex的user.js模块中,通过数组的

filter⽅法和indexOf定义⼀个递归函数,在请求⽤⼾信息的时候,再进⾏commit提交mutations⼀个

计算函数同时调⽤递归函数传递参数(参数⼀是异步路由,参数⼆是⽤⼾的权限信息)进⾏递归过滤,留 下当前⽤⼾有权限访问的路由。

(3)在mutations中,通过concat⽅法合并静态路由和过滤后的动态路由,使⽤路由的addRouter⽅法 注册为新的路由,实现根据不同的⽤⼾展⽰不同的菜单侧边栏; (后端也会进⾏⼀些权限接⼝的判断和 拦截,通过⾮法途径是访l问不了的)

import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'const target_url = 'http://27.196.3.67:22002/isc_sso/login?service=http://27.196.109.58:8000'NProgress.configure({ showSpinner: false })const whiteList = ['/login', '/auth-redirect', '/bind', '/register']router.beforeEach((to, from, next) => {NProgress.start();if (getToken()) {to.meta.title && store.dispatch('settings/setTitle', to.meta.title)/* has token*/if (to.path === '/login') {next({ path: '/' })// window.location.href = target_url;NProgress.done()} else {if (store.getters.roles.length === 0) {// 判断当前用户是否已拉取完user_info信息store.dispatch('GetInfo').then(() => {store.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表router.addRoutes(accessRoutes) // 动态添加可访问路由表next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})}).catch(err => {store.dispatch('LogOut').then(() => {Message.error(err)next({ path: '/' })// window.location.href = target_url})})} else {next()}}} else {// 没有tokenif (whiteList.indexOf(to.path) !== -1) {// 在免登录白名单,直接进入next()} else {next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页// window.location.href = target_urlNProgress.done()}}
})router.afterEach(() => {NProgress.done()
})

相关文章:

  • k8s介绍与实践
  • 【AI提示词】儿童看护员
  • 【嵌入式】【阿里云服务器】【树莓派】学习守护进程编程、gdb调试原理和内网穿透信息
  • css图片设为灰色
  • Allure测试报告按测试终端和测试类型智能分类查看
  • 前端为什么需要单元测试?
  • 数据仓库分层架构解析:从理论到实战的完整指南​​
  • AXOP36061S: 60V 高压单通道运算放大器
  • 视频分析设备平台EasyCVR化解高速服务区管理难题,打造全方位智能安防监控方案
  • 《AI赋能职场:大模型高效应用课》第8课 AI辅助职场沟通与协作
  • 杂书的读书笔记
  • 线程池七个参数的含义
  • python有序列表
  • 【Triton 教程】triton_language.full
  • C++手撕STL-其一
  • 大语言模型的训练、微调及压缩技术
  • InternVL 3的技术深度分析,代码与原理
  • 【ELF2学习板】交叉编译FFTW
  • 记录学习的第二十九天
  • 浅析数据库面试问题
  • 上海明天有雷雨、大风,下周气温在春日舒适区间
  • 中国房地产报:以改促治实现楼市多难并解
  • 女子伸腿阻止高铁关门被拘,央媒:严格依规公开处理以儆效尤
  • “这是本届政府的态度”,英国明确拒绝与中国脱钩
  • 旧电梯换新如何分摊费用?低楼层可以不出钱吗?上海闵行举办讨论会
  • 寺庙餐饮,被年轻人追捧成新顶流