前言

现在流行的前端框架很多,有若依、eladmin等框架,这些框架都是用于做后台管理的框架,既然是后台管理那么就会涉及到一个比较关键性的问题就是权限管理

什么是权限管理

既然是后台管理登录的人的角色可能是超级管理员、管理员、以及普通用户或者有更多的层级角色,这些不同的角色登入后台管理系统左侧导航栏的显示是不同的,实现不同角色登录后台管理系统左侧的导航栏显示不同就是实现权限管理。

很多文章都写的是后端如何实现后台管理系统,以若依框架为例来说说前端是如何实现权限管理的。

思路

  1. 将用户的权限字符存入数据库,当用户登录后根据用户的登录信息获取用户的所有信息(包括用户的权限信息)存入Vuex中。

    // 获取用户信息
    GetInfo({ commit, state }) {return new Promise((resolve, reject) => {getInfo().then(res => {const user = res.userconst avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar;if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组commit('SET_ROLES', res.roles)commit('SET_PERMISSIONS', res.permissions)} else {commit('SET_ROLES', ['ROLE_DEFAULT'])}commit('SET_NAME', user.userName)commit('SET_USER', user)commit('SET_AVATAR', avatar)resolve(res)}).catch(error => {reject(error)})})
    },
    
  2. 将路由分为公共路由动态路由(基于用户权限动态去加载)

    公共路由

    export const constantRoutes = [{path: '/redirect',component: Layout,hidden: true,children: [{path: '/redirect/:path(.*)',component: () =>import ('@/views/redirect')}]},
    ]
    

    动态路由

    export const dynamicRoutes = [{path: '/',component: NavigationBar,hidden: true,permissions: ['system:user:edit'],children: [{path: 'system/user-auth',component:Layout,children: [{path: 'role/:userId(\\d+)',component: () =>import('@/views/system/user/authRole'),name: 'AuthRole',meta: { title: '分配角色', activeMenu: '/system/user' }}]}]},{path: '/',component: NavigationBar,hidden: true,permissions: ['system:role:edit'],children:[{path:'system/role-auth',component:Layout,children: [{path: 'user/:roleId(\\d+)',component: () =>import ('@/views/system/role/authUser'),name: 'AuthUser',meta: { title: '分配用户', activeMenu: '/system/role' }}]}]},{path: '/system/dict-data',component: Layout,hidden: true,permissions: ['system:dict:list'],children: [{path: 'index/:dictId(\\d+)',component: () =>import ('@/views/system/dict/data'),name: 'Data',meta: { title: '字典数据', activeMenu: '/system/dict' }}]},{path: '/monitor/job-log',component: Layout,hidden: true,permissions: ['monitor:job:list'],children: [{path: 'index',component: () =>import ('@/views/monitor/job/log'),name: 'JobLog',meta: { title: '调度日志', activeMenu: '/monitor/job' }}]},{path: '/tool/gen-edit',component: Layout,hidden: true,permissions: ['tool:gen:edit'],children: [{path: 'index/:tableId(\\d+)',component: () =>import ('@/views/tool/gen/editTable'),name: 'GenEdit',meta: { title: '修改生成配置', activeMenu: '/tool/gen' }}]}
    ]
    

    从上面的代码中我们可以看出公共路由没有permissions字段,动态路由中有permissions字段。

  3. 根据用户权限中的permissions字段和Vuex中存储permissions字段判断当前登录的用户拥有哪些权限。

    const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
    router.addRoutes(asyncRoutes);
    
    // 动态路由遍历,验证是否具备权限
    export function filterDynamicRoutes(routes) {const res = []routes.forEach(route => {if (route.permissions) {if (auth.hasPermiOr(route.permissions)) {res.push(route)}} else if (route.roles) {if (auth.hasRoleOr(route.roles)) {res.push(route)}}})return res
    }
    
    // 验证用户是否含有指定权限,只需包含其中一个
    hasPermiOr(permissions) {return permissions.some(item => {return authPermission(item)})
    },
    
    function authPermission(permission) {const all_permission = "*:*:*";const permissions = store.getters && store.getters.permissionsif (permission && permission.length > 0) {return permissions.some(v => {return all_permission === v || v === permission})} else {return false}
    }
    

若依前端实现权限管理相关推荐

  1. yii beforeaction 如何赋值全局变量_前端如何进行用户权限管理

    1:问题: 假如在做一个管理系统,面向老师学生的,学生提交申请,老师负责审核(或者还需要添加其他角色,功能权限都不同). 现在的问题是,每种角色登录看到的界面应该都是不一样的,那这个页面的区分如何实现 ...

  2. 个人笔记 springboot整合shiro实现权限管理,前端使用vue 10155

    转载自github,地址https://github.com/Heeexy/SpringBoot-Shiro-Vue 目录结构: application.yml spring:datasource:u ...

  3. Vuex前端saas人力资源中台管理项目第五天 权限管理和图表设计

    权限设计-RBAC的权限设计思想 首先,我们先了解下什么是传统的权限设计 从上面的图中,我们发现,传统的权限设计是对每个人进行单独的权限设置,但这种方式已经不适合目前企业的高效管控权限的发展需求,因为 ...

  4. 前端如何实现权限管理板块的流程和思想

    一.什么是权限管理 权限管理是指一个角色(如vip和非vip)在一个系统中只能使用指定的功能并且只能访问指定的界面,权限管理是一个项目当中必不可少的部分. 二.如何做到权限管理功能 注意:  新版 V ...

  5. 前端如何进行用户权限管理

    这里是修真院前端小课堂,本篇分析的主题是 [前端如何进行用户权限管理] 1:问题: 假如在做一个管理系统,面向老师学生的,学生提交申请,老师负责审核(或者还需要添加其他角色,功能权限都不同). 现在的 ...

  6. 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)

    TZHSWEET:请大家多多反馈问题,我已经在修改中了,已更新版本...... 如果大家遇到数据库附加问题,EF连接字符串问题,请自行配置,如果有bug反馈可以私聊,我的qq:409180955. 项 ...

  7. tp5权限管理代码_权限系统控制到按钮级别开源推荐 Spring BootShiroVue

    往期精彩推荐: 高逼格开源聊天系统 推荐 Spring+Netty+Websocket实现 java人关注这个github开源项目,你会嫌弃手上的笔试面试题资料 2020年一线大厂java笔试面试题分 ...

  8. 单点登录与权限管理本质:cookie安全问题

    继续介绍「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,前一篇文章介绍了单点登录概念,以CAS协议的基本流程为例讲解了系统间的交互过程,过程中,cookie的设置和传输涉及的比较多,如何 ...

  9. shiro权限管理_重量级课程发布~企业权限管理平台(SpringBoot2.0+Shiro+Vue)

    历经半个多月的时间,Debug亲自撸的 "企业员工角色权限管理平台"终于完成了.正如字面意思,本课程讲解的是一个真正意义上的.企业级的项目实战,主要介绍了企业级应用系统中后端应用权 ...

最新文章

  1. 步进电机红外遥控C语言程序,单片机红外遥控+步进电机+1602液晶显示c语言源程序...
  2. R学习_multitaper包解析2:子函数spec.mtm.dpss,dpssHelper
  3. linux下缓存命中测试,linux为什么报表缓存缓存未命中?_linux_开发99编程知识库...
  4. IOS手机关于音乐自动播放问题的解决办法
  5. 超硬核!数据库学霸笔记,考试/面试随便秒杀
  6. 织梦数据库支持mysql5.7_最新织梦DEDECMS5.7数据库说明文档
  7. 信息学奥赛C++语言:三位数的翻转
  8. Centos/Linux下如何查看网关地址/Gateway地址
  9. 计蒜客难题挑战:奇怪的国家
  10. [Java] 蓝桥杯ADV-180 算法提高 陶陶摘苹果2
  11. 基于机器视觉的安利纽崔莱瓶子外观检测
  12. 网络医疗的进步让智能穿戴设备找到市场新蓝海
  13. 功能强大的全新虚拟商品自动发货商城源码
  14. python数字转英文_GitHub - Ailln/en2an: 快速转化「英文数字」和「阿拉伯数字」
  15. 安卓app开发方案_简谈企业最常用的三种安卓app开发语言
  16. 计算机大一新生的体验
  17. 经济学硕士读计算机博士,去美国那些大学攻读经济学博士比较好?看完你就清楚了...
  18. 各版本Metal支持的iOS版本与MacOS版本
  19. 【读点论文】A ConvNet for the 2020s,结合swin transformer的结构设计和训练技巧调整resnet网络,在类似的FLOPs和参数量取得更好一点的效果
  20. 30分钟学会XAML

热门文章

  1. 8个精美的WordPress建站模板
  2. Adobe Media Encoder“编译影片时出错“ GPU渲染错误 错误代码:-1609629695
  3. mysql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; ERROR 1819
  4. Java 的数据类型
  5. LINUX挂载共享盘
  6. 全栈必备 Log日志
  7. 在Go语言项目中使用Zap日志库
  8. 汇编语言-计算立方值
  9. 从资源配置的角度理解IT领域的一些场景
  10. PE 系统备份 【步骤图】