画了5张图,助你轻松打败动态权限路由!

简介: 画了5张图,助你轻松打败动态权限路由!

👨‍💻 前言


  • 不知不觉最近又到了9月份,这个季节是大部分应届生和面试者找工作的季节,让我情不自禁想到了之前刚开始工作的那些事。
  • 首先很后悔我没有参加校招,刚开始找工作时没有什么项目,拿着一个后台管理系统和一个小程序项目跟一个H5移动端项目就屁颠屁颠跑去面试了。
  • 面试中也有被问到后台权限管理,那时候哪里懂什么是权限管理什么动态路由呀,项目中都是写死的路由也根本没做什么权限管理,给我问的一懵一懵,但是还是很幸运我表达了我对公司的喜爱跟上进的性格,还是入职了公司。
  • 经过了一些时间的沉淀,对这方面也有一些理解,现在我想把关于这部分的知识讲给有需要的同学听,我会尽量讲的通俗易懂,如果有需要可以继续往下看。
  • 本文参与了掘金周边礼物🎁活动哟,具体规则请看文末。


⁉️ 什么是权限管理


  • 所谓权限管理顾名思义就是权力限制,不同的权力的人能干不同的事情。
  • 如果你越界了,那对不起,操作无效。
  • 而在我们的后台管理系统中的权限管理也是一样的意思,超级管理员能做的肯定会比管理员能做的事情要多,而这个事情其实在我们前端看来说白了就是显示了什么页面,显现了什么操作按钮
  • 那我们反过来想,所以我们的前端的目的就是为了根据不同权限的人来动态控制页面呈现和按钮的呈现,那我们通过什么来判断呢?权限表,这个权限表有些是一个权限数组,有些是提前规定好不同角色的权限通过返回一个角色来分辨,具体的还得跟后端进行配合。
  • 这个权限表我们什么时候获取会是最合理呢,那无疑就是登录的时候了,所以我们的流程大概是这样的:
  • 登录系统获取token
  • 根据token获取用户信息(权限表等)
  • 根据权限表等信息动态添加前端路由,让不同的人看见不同的页面


❣️ 路由是怎么做到动态的


  • 我们知道了权限来限制不同的页面展示并跳转,那我们的页面跳转通过什么来控制呢?没错,是路由
  • 每次我们进入另一个页面的时候事实上就是进入不同的路由,这时候我们可以使用路由守卫来进行一些操作限制。
  • 我们可以在这里判断cookie是否存有token,如果没有则会进入到登录页进行登录获取token和权限等信息。
  • 我们可以根据权限来组装路由表 (关于路由表组装会在下文介绍) 进而通过router.addRoutes添加路由,并把这些信息存储在vuex里面,我们的tabbar侧边栏等可以根据这些信息来控制样式又或者是显示隐藏。
  • 说白了,关于动态路由我们的步骤大概是这样的:
  • 我们通过在路由跳转前拦截对登录状态进行判断
  • 如果登录就放行,未登录就去登录并存储各种权限和信息
  • 根据这些权限来进行路由组装完善我们的前端路由


💗 路由放在哪

  • 现在我们都知道需要通过后端返回的权限来进行路由表的组装,再通过router.addRoutes添加路由,那我们的路由表其实根据不同的项目也有不同的存放方法。

放在前端

  • 放在前端控制的经典案例就是花裤衩大佬的vue-element-admin,相信大部分人的权限路由都是看花裤衩入的门,这里我就不过多写入源码了,如果有需要的可以自行品尝。
  • 回到主题,路由表放在前端也就是我们在一个文件比如router.js把所有可能用到的路由都先定义好:
/** router.js **/
export let Routes = [{
    path: '/',
    redirect: '/home/index'
  },
  {
    path: '/home',
    component: layout,
    redirect: '/home/index',
    meta: { roles: 'home' },
    children:[
        ...
    ]
   }
]
  • 定义好的路由每个都要加meta路由元信息来代表这个路由所需要的权限,通过每个路由的meta与权限表进行匹配。
  • 进而获取到一个最终的路由表,而这个路由表就是我们要router.addRoutes的路由。
  • 交给前端控制说白了就是干了一件事,通过用户的权限和之前在router.js里面每一个页面所需要的权限做匹配,最后返回一个该用户能够访问路由有哪些。
  • 当然放在前端的优缺点也是有的:
  • 逻辑清楚 代码量不多,新手看的会比较明白,比较容易上手。
  • 编写繁琐 虽然路由表放在前端定义但是是写死的,每次新增模块或者修改模块都没办法动态修改,只能由前端来更改。


放在后端

  • 放在后端例子也有很多,现在很多开源的管理系统后台都有一套前端跟后端配合的动态路由权限系统,就拿若依来说吧。
  • 首先在前端会有一个基本路由表,这个路由表里面会包含一些初始的页面,包括固定布局页面404页面
// 前端未找到页面路由
const notFoundRouter = {
  path: '*',
  redirect: '/404',
  hidden: true
}
// 根级菜单
const rootRouter = {
  key: '',
  name: 'index',
  path: '',
  component: 'BasicLayout',
  redirect: '/index',
  meta: {
    title: ''
  },
  children: []
}
复制代码
  • 不同的项目初始页面也各不相同,这些页面基本上是不会变的,重点在于我们接下来怎么在这个路由表里面动态添加我们页面的路由。
  • 我们通过token等方法向后端请求路由接口,这时候一般会返回一个路由json,因为我们的路由表是个对象,所以我们需要在前端进行处理对最终的路由表进行拼接。
  • 进而获取到一个最终的路由表,而这个路由表就是我们要router.addRoutes的路由。
  • 交给后端控制说白了也就是返回所有路由json我们进行拼接添加到项目路由中,而这些都是动态的。
  • 当然交给后端控制的优缺点我也说一下:
  • 足够动态 一般这种系统都会有一个菜单管理,我们通过在线上进行菜单的配置就可以动态改变路由,会比在前端写死路由方便很多。
  • 足够安全 因为路由表毕竟是在数据库维护,肯定多多少少会比在前端安全一些。
  • 理解困难 对于刚上手动态路由的新手如果直接去阅读优秀开源的项目源码是会有点困难的。


🙋‍♂️ 现在我知道了


  • 好了现在我们知道了一个动态权限路由模块也就是通过权限表 + 路由表来实现。
  • 所以我们只需要搞清楚两个要素即可,当前角色权限(权限表),和完整路由表。角色权限正常来说都是由后端返回,无非就是完整路由表放在哪的问题,我上面也说了路由表的两种组装方式,根据项目的需求来选择适合自己的方式即可。
  • 我们把逻辑都捋了一遍之后,假如以后有人问起你的权限路由是怎么做的,你可以这样自信的回答:
  • 在不同的项目中会有不同的处理方式,而最主要的是有两个要素角色权限(权限表)完整路由表
  • 权限毫无疑问是通过接口后端返回的,而无非就是路由表放在哪而已
  • 而我这边项目的逻辑是,路由表和权限表都在管理后台添加编辑。登陆后,后端返回该角色的权限列表和路由表,然后根据这个数据构建路由和菜单。
  • 这样自信的说完就足够了,记得不用说太多,因为他会追问细节,接下来只需要回忆我上面的几张图就可以啦~


👉 参考


vue-element-admin

手摸手,带你用vue撸后台 系列二(登录权限篇)

动态路由前端控制还是后端控制?(附代码)


👋 写在最后


  • 首先很高兴大家能阅读到这里,本文通过5张图片来帮助大家轻松打败动态权限路由,希望对大家有所帮助。
  • 如果您觉得这篇文章有帮助到您的的话不妨🍉关注+点赞+收藏+评论+转发🍉支持一下哟~~😛您的支持就是我更新的最大动力。
相关文章
|
存储 前端开发 JavaScript
潮玩宇宙大逃杀无聊猿卷轴模式系统开发详细规则丨步骤需求丨方案项目丨技术架构丨源码功能
确定游戏类型和规则:明确无聊猿卷轴模式游戏类型和游戏规则,包括敌人类型、地图设计、任务类型、战斗机制等。
|
22天前
|
机器学习/深度学习 敏捷开发 算法
技术之道:从细节到全局的智慧
【10月更文挑战第12天】 本文将分享一些关于技术感悟的心得,通过具体实例和总结,探讨如何从细节出发,逐步提升技术能力。无论是新手还是资深开发者,都能从中得到启发和指导。
37 1
|
2月前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
63 2
|
3月前
|
网络安全 网络性能优化 数据中心
想要丝滑地使用ACL,少不了这篇干货~
想要丝滑地使用ACL,少不了这篇干货~
|
4月前
|
测试技术
ACL 2024:大模型性能掺水严重?北大交出答卷:交互评估+动态出题,死记硬背也没用
【7月更文挑战第8天】北大研究团队推出KIEval框架,针对大语言模型(LLMs)的性能评估进行创新。KIEval采用互动评估和动态出题,通过多轮基于知识的对话测试模型理解和应用能力,旨在减少数据污染影响,挑战死记硬背的评估。然而,该方法可能增加计算需求,且评估结果可能受主观因素影响,不适用于所有类型LLMs。[论文链接:](https://arxiv.org/abs/2402.15043)**
85 24
|
3月前
|
网络协议 网络架构
动图 | 6张图让你秒懂“ARP中间人攻击”原理,堪称史诗级解释!
动图 | 6张图让你秒懂“ARP中间人攻击”原理,堪称史诗级解释!
122 0
|
vr&ar 安全 AndFix
Metaforce佛萨奇系统开发案例详细丨方案逻辑丨项目程序丨规则玩法丨源码功能
Requirement analysis: Communicate fully with customers to understand their specific needs and expectations for the Metaforce Sasage system, including game types, features, art styles, etc
|
存储 安全 前端开发
DApp公排互助预约抢单排单模式系统开发参考版/详细流程/方案逻辑/规则玩法/案例设计/源码程序
需求分析:与团队明确系统的需求、目标和范围,包括公排互助预约抢单排单模式系统的功能、规则、奖励机制等方面
|
算法 搜索推荐 数据挖掘
转:微粒群算法在文档管理系统中起到了哪些作用
微粒群算法(Particle Swarm Optimization,PSO)就像是群体智能里的“小聪明”。它的工作原理,就像模仿鸟群、鱼群这些大咖们在搜索范围里的表现,不停的在搞事情。并且它的设计灵感可不是从天而降,而是直接从大自然里“借鉴”来的,就好像是在大自然的“群体协作展览会”上学了一手。一群 “微粒”们互相商量,看看谁的经验更靠谱,然后一起朝着“胜利大本营”前进。
53 1
|
区块链 开发者
Jogger慢跑者跑鞋零撸模式系统开发详细规则/逻辑分析/案例详情/项目方案/源码部署
  DApp是指以区块链为底层技术平台的分布式应用程序,它使得开发者可以构建去中心化和自主运行的应用程序,并通过链上的合约机制实现代码不可更改性和事务透明性。