最近看了AntDesignPro关于权限控制的官方文档以及自己框架里权限控制的实现,总结一下。

先贴一下官网上关于权限控制的图有利于理解

步骤如下:

  1. 判断是否有 AccessToken 如果没有则跳转到登录页面
  2. 获取用户信息和拥有权限store.dispatch('GetInfo')
  3. 用户信息获取成功后, 调用 store.dispatch('GenerateRoutes', userInfo) 根据获取到的用户信息构建出一个已经过滤好权限的路由结构(src/store/modules/permission.js)
  4. 将构建的路由结构信息利用 Vue-Router 提供的动态增加路由方法 router.addRoutes 加入到路由表中
  5. 加入路由表后将页面跳转到用户原始要访问的页面,如果没有 redirect 则进入默认页面 (/dashboard/workplace)

大概思路是在用户登陆时拿到该用户的角色,根据角色可以知道该角色对应有哪些菜单,然后通过一个逻辑方法 将这些从数据库拿来的菜单数据进行处理(递归处理子菜单,加入映射的组件等),筛选并组合成router所需要的数据格式的数组,最终在路由守卫中将这个数组router.addRoutes()添加到路由中

其实不管是动态路由还是mock数据,最终都是处理成一样的符合路由结构的一个数组后进行router.addRoutes()。

我的框架中菜单的权限实际上已经在接口中被过滤掉了,拿到的数据都是该角色有权限的菜单,下图中的permission参数在antdvpro中指的是指令权限,也就是action级别的权限

action级别的权限控制,在组件上加上v-action:[method],即可实现自行判断权限

最新文章

  1. 三维网格精简算法(Quadric Error Metrics)附源码
  2. MySQL DDL 整理
  3. ORACLE 获取程序当前位置的方法
  4. Android存储空间不足的解决办法
  5. CoreAnimation-05-CABasicAnimation
  6. OpenStack:初识
  7. 对有状态bean和无状态bean的理解(转)
  8. Centos 下安装Zabbix Linux 客户端
  9. mysql存储过程 基本语法
  10. ConcurrentHashMap源码阅读
  11. python 程序中调用go
  12. Python——爬取人口迁徙数据(以腾讯迁徙为例)
  13. transform、transition、animation 区别
  14. MySQL — 优化之explain执行计划详解(转)
  15. include指令和<jsp:include>动作标识区别:--不明觉厉 先收藏
  16. checklistboxx 多选取值 和选中
  17. tensorflow 优化图
  18. 表优化 altering table OPTIMIZE TABLE `sta_addr_copy`
  19. ehlib 安装
  20. Android 性能优化之使用MAT分析内存泄露

热门文章

  1. 【Java】标识符 & 命名规则
  2. C++基础的一些代码和笔记 stl乱炖
  3. stand up meeting 1/14/2016
  4. 玩转控件:Fucking ERP之流程图
  5. SQL语句加锁分析
  6. IN612 IN612L蓝牙5.0 SoC芯片替换NRF52832/NRF52840
  7. 使用redis-dump与redis-load方式迁移redis数据库
  8. mysql参数max_binlog_cache_size设置不当引发的血案
  9. 进程管理工具 Supervisor
  10. js输入框练习