谈一谈VUE 后台管理系统权限控制

  前端权限从本质上来讲, 就是控制视图层的展示,比如说是某个页面或者某个按钮,后端权限可以控制某个用户是否能够查询数据, 是否能够修改数据等操作,后端权限大部分是基于RBAC,比如说 一个用户可能会有多个角色,而一个角色可以会有不同权限

开始正题部分了

1. 前端做权限有什么好处?

  • 降低非法操作的可能性
  • 尽可能排除不必要的请求,降低服务器压力 没必要的请求,不具备权限的请求,应该压根就不要发送, 请求少了,服务器压力自然就很减轻
  • 提高用户体验  就给用户展示已有权限的功能,避免在界面上给用户带来困恼

2. 前端权限的控制思路

  • 菜单的控制
  1. 用户没有权限 菜单就不要展示没有的侧边栏
  • 界面的控制
  1. 用户没有登录, 而是在地址栏手动的输入地址, 界面肯定是不能展示的 而我们要强制是跳转到登录界面
  2. 用户登录了, 但是手动输入跳转到没有权限的界面, 我们要强制跳转到404界面
  • 按钮的控制
  1. 用户进入页面,但是他只有查看权限 , 删除和修改按钮就不应该展示出来 
  • 请求和响应的控制
  1. 用户篡改了非常规操作, 比如 禁用的按钮改成启用状态, 此时发送的请求 就应该被拦截

3. Vue的权限控制实现

  1. // 后面的操作都是基于这个结构, 结构可以跟后台沟通
  2. // 后台返回的登陆数据
  3. {
  4. data: [用户名,token 什么的],
  5. rights: [
  6. {
  7. id:1,
  8. authName: '用户管理',
  9. icon: 'icon-user',
  10. children: [
  11. {
  12. id: 1_1,
  13. authName: '用户列表',
  14. path: 'users',
  15. rights: ['view', 'add', 'edit', 'delete']
  16. }
  17. ]
  18. },
  19. {
  20. id:2,
  21. authName: '角色管理',
  22. icon: 'icon-tiji',
  23. children: [
  24. {
  25. id: 2_1,
  26. authName: '角色列表',
  27. path: 'roles',
  28. rights: ['view', 'add']
  29. }
  30. ]
  31. }
  32. ]
  33. }
  1. 菜单的控制 
    (1)查看登陆之后的数据
        token 用于前端用户的状态保持
        rights 该用户具备的权限数据,一级菜单就对应着一级权限,二级菜单就对应二级权限
    (2)根据rights数据,动态渲染左侧菜单栏,为了方便使用,一般放在vuex中 但是vuex中的数据在页面刷新就会消失,所以配合本地存储使用,localstoage或者sessionstoage 看产品需求 
    (3)退出登录的时候 要把本地存储的数据清空 和vuex数据也清空,vuex中数据清空最简单的方法就是 window.location.reload()
  2. 界面的控制
    (1)假如用户不进行登陆 ,输入相应页面的网址 也可以进入页面,所有我们要判断用户的是否登录
      
    1. router.beforeEach((to, form, next )=> {
    2. if (to.path == '/Login') {
    3. next()
    4. } else {
    5. const token = sessionstoage.getItem('token')
    6. if (!token) {
    7. next('/Login')
    8. } else {
    9. next()
    10. }
    11. }
    12. })

    2)进行token验证后 ,会发现用户登录后还是可以通过url访问不存在权限的页面
      
    这里就需要使用动态路由
      首先在router.js export 一个方法

    1. // router.js
    2. import store from '@/sotre'
    3.  
    4. const userRule = { path: '/users', component: Users}
    5. const roleRule = { path: '/roles', component: Roles}
    6.  
    7. // vuex中存放的rightsList中每个path添加到路由中 怎么添加呢??? 请看
    8. usersroles都是跟后台定义好的,所以对号入座
    9. const ruleMapping = {
    10. 'users': userRule,
    11. 'roles': roleRule
    12. }
    13.  
    14. export function initRoutes () {
    15. const currentRoutes = router.option.routes // 可以拿到router的路由配置信息
    16. const rightsList = store..state.rightsList // 取出vuex存储的用户路由信息
    17. rightsList.forEach(item => {
    18. item.children.forEach(items => {
    19. currentRoutes[2].push(ruleMapping[items.path]) // 这步很关键 把对应的值push进去
    20. })
    21. })
    22. router.addRoutes(currentRoutes)
    23. }

        在login页面引入 登陆成功的时候调用 要在vuex赋值之后再调用
     这时又会发现一个问题, 页面一刷新 访问那个页面都会是404
     因为动态添加的路由 一刷新页面就会消失,
     哼哼哼,仔细听
     我们可以在App页面中created生命周期函数中调用router.js 中initRoutes方法,
     你就会发现 页面刷新也没事了 而且登陆的用户通过url跳转没有权限的页面也是不可以了

  3. 按钮的控制
    ...

VUE 后台管理系统权限控制的更多相关文章

  1. vue后台管理系统权限处理

    vue后台管理系统权限 1.权限问题:用户和管理员进入管理系统看到的模块是不一样的,管理员看的的要比用户看到的多.需要用到动态加载路由,router.addRouters()来动态的挂载路由 // 1 ...

  2. 基于Vue实现后台系统权限控制

    原文地址:http://refined-x.com/2017/08/29/基于Vue实现后台系统权限控制/,转载请注明出处. 用Vue/React这类双向绑定框架做后台系统再适合不过,后台系统相比普通 ...

  3. vue实现菜单权限控制

    大家在做后台管理系统时一般都会涉及到菜单的权限控制问题.当然解决问题的方法无非两种——前端控制和后端控制.我们公司这边的产品迭代速度较快,所以我们是从前端控制路由迭代到后端控制路由.下面我会分别介绍这 ...

  4. Spring Boot + Spring Cloud 实现权限管理系统 权限控制(Shiro 注解)

    技术背景 当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和操作可用性的权限验证,或者叫访问控制.但这仅限于页面的显示和操作,我们的后台接口还是没有进行权限的验证,只要知道了后台的接 ...

  5. 如何优雅的在 vue 中添加权限控制

    前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...

  6. 如何在 vue 中添加权限控制管理?---vue中文社区

    前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...

  7. springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)

    一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...

  8. vue 后台管理系统菜单权限管理

    来自:https://www.cnblogs.com/fqh123/p/11094296.html 侵删 login登录方法 login() { if (!this.username) { retur ...

  9. 我的第一个python web开发框架(34)——后台管理系统权限设计

    框架底层和接口终于改造完成了,小白再次找到老菜. 小白:老大,上次你对后台权限系统简单的讲了一下,我一点头绪都没有,现在有空完整的说一说吗? 老菜:说到权限系统,要讲明白真不容易,权限系统并不是越复杂 ...

随机推荐

  1. go 内置函数

    一.什么是内置函数? 二.内置函数有哪些? 名称 说明 close 用于管道通信 len.cap len 用于返回某个类型的长度或数量(字符串.数组.切片.map 和管道):cap 是容量的意思,用于 ...

  2. SQL表的简单操作

    创建数据库表,进行增删改查是我们操作数据库的最基础的操作,很简单,熟悉的请关闭,免得让费时间. 1.创建表: sql中创建数值类型字段要根据该字段值的增长情况选择类型: tinyint 占1个字节,长 ...

  3. "小号文本"组件:<small> —— 快应用组件库H-UI

     <import name="small" src="../Common/ui/h-ui/text/c_tag_small"></impor ...

  4. node实现防盗链

    什么是防盗链 盗链,顾名思义就是盗窃链接,就是在他人未经允许的情况下,去使用他人站点的任何图片,视频,内容等资源,来借此提升已用的站点的活跃度,严重损坏了别人的利益.那么防盗链就是采用一些办法阻止自己 ...

  5. AJ学IOS 之第一次打开Xcode_git配置,git简单学习

    AJ分享,必须精品 一:错误 当第一次打开Xcode我们进行commit操作的时候会报错: The working copy “测试” failed to commit files. * Please ...

  6. 2019-07-28【机器学习】无监督学习之聚类 DBSCAN方法及其应用 (在线大学生上网时间分析)

    样本: import numpy as np import sklearn.cluster as skc from sklearn import metrics import matplotlib.p ...

  7. Redis之事务操作

    1.Redis事务的概念: Redis 事务的本质是一组命令的集合.事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求 ...

  8. 【Java】抽象类、接口

    什么是抽象类? 特点: - 抽象类几乎普通类一样,除了不能实例化 - 不能实例化不代表没有构造器,依然可以声明构造器,便于子类实例化调用 - 具有抽象方法的类,一定是抽象类 abstract 抽象的 ...

  9. G - Harmonic Number (II) LightOJ - 1245

    算是一个找规律的题目吧. 枚举前sqrt(n)个数,数i出现的次数为n/i-n/(i+1),对答案的贡献为(n/i-n/(i+1))*i. 对于sqrt后边的数,可以直接由n/i获得,并且一定只出现一 ...

  10. 详解 DatagramSocket类

    (请观看本人博文 -- <详解 网络编程>) DatagramSocket 概述: 这类代表一个发送和接收数据包的插座. 该类是遵循 UDP协议 实现的一个Socket类. 数据报套接字发 ...