返回顶部
首页 > 资讯 > 前端开发 > 其他 >详解vue各种权限控制与管理的实现思路
  • 116
分享到

详解vue各种权限控制与管理的实现思路

前端Vue.jsVuex 2023-05-14 22:05:59 116人浏览 安东尼
摘要

本篇文章给大家带来了关于Vue的相关知识,其中主要详细介绍了vue各种权限控制与管理的实现思路,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。一、 菜单权限菜单权限:控制用户在系统中能够看到哪些菜单项菜单权限指的就是后台系统中的左侧的菜

本篇文章给大家带来了关于Vue的相关知识,其中主要详细介绍了vue各种权限控制与管理的实现思路,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

详解vue各种权限控制与管理的实现思路

一、 菜单权限

  • 菜单权限:控制用户在系统中能够看到哪些菜单项
  • 菜单权限指的就是后台系统中的左侧的菜单栏,前端可以根据后端接口返回的权限数据结合element-ui菜单组件循环拼接而成即可,有什么权限就展示什么菜单
  • 通过vuex+持久化插件(本地存储)解决刷新页面菜单栏不显示问题
  • 实现退出登录功能时,通过clear()方法清除本地数据,跳转后通过window.location.reload()刷新当前页面,可实现清除vuex数据的操作

二、 路由权限

  • 路由权限为了防止用户恶意通过在地址栏输入地址发生强行跳转,可以通过动态路由对用户权限做出相关限制,有权限则跳转,无权限则跳转404页面
  • 路由权限的方法需要在两个时机调用initDynamicRoutes,分别是登录成功时和页面创建时,否则动态路由为默认值,刷新无法访问
import Vue from 'vue'
import VueRouter from 'vue-router'
import Layout from '@/layout'
import store from '@/store'

Vue.use(VueRouter)

// 动态路由规则
const tableRule = {
  path: '/table',
  name: 'table',
  component: () => import('@/views/table/index.vue')
}
const imageRule = {
  path: '/image',
  name: 'image',
  component: () => import('@/views/image')
}
const userRule = {
  path: '/users',
  name: 'users',
  component: () => import('@/views/users')
}

// 路由规则和字符串的映射关系
const ruleMapping = {
  table: tableRule,
  users: userRule,
  image: imageRule
}

//静态路由
const routes = [
  {
    path: '/login',
    // name: 'login', // 这里如果有name 控制台会提示
    component: () => import('@/views/login')
  },
  {
    path: '/',
    component: Layout,
    children: [
      {
        path: '',
        // name: 'home',
        component: () => import('@/views/home')
      },
      {
        path: '/chart',
        component: () => import('@/views/chart')
      }
    ]
  }
]

const router = new VueRouter({
  routes
})



//路由权限:用户登录后接口返回,存储到本地缓存
const rightList = [
  {
    id: 1,
    authName: "基本页面",
    icon: "el-icon-connection",
    children: [
      {
        id: 11,
        authName: "表格页面",
        icon: "el-icon-s-grid",
        path: "table",
        rights: ["view", "edit", "add", "delete"]
      },
      {
        id: 12,
        authName: "素材页面",
        icon: "el-icon-s-marketing",
        path: "image",
        rights: ["view", "edit", "add", "delete"]
      }
    ]
  },
  {
    id: 2,
    authName: "用户权限",
    icon: "el-icon-set-up",
    children: [
      {
        id: 21,
        authName: "权限页面",
        icon: "el-icon-s-custom",
        path: "users",
        rights: ["view", "edit", "add", "delete"]
      }
    ]
  }
];

//在登录(login.vue)、页面刷新(App.vue)的时候,调用initDynamicRoutes
export function initDynamicRoutes () {
  // 根据二级权限 对路由规则进行动态的添加
  const currentRoutes = router.options.routes
  rightList.forEach(item => { // 如果是没有子路由的话 就直接添加进去 如果有子路由的话就进入二级权限遍历
    if (item.path) {
      const temp = ruleMapping[item.path]
      // 路由规则中添加元数据meta
      temp.meta = item.rights
      currentRoutes[1].children.push(temp)
    }

    item.children.forEach(item => {
      // item 二级权限
      const temp = ruleMapping[item.path]
      // 路由规则中添加元数据meta,用于按钮权限控制
      temp.meta = item.rights
      currentRoutes[1].children.push(temp)
    })
  })
  // 添加路由规则
  router.addRoutes(currentRoutes)
}

export default router

三、 按钮权限

  • 所谓的按钮权限是指在某个菜单的界面中,我们需要根据后端返回的该角色当前操作模块中对应的按钮权限数据,展示出可进行操作的按钮,比如删除,修改,增加等按钮.
    1. 如果要实现按钮的权限控制,我们需要使用vue的自定义指令去实现: 首先需要创建一个按钮权限控制的指令,我们定义这个指令的名称为: v-permission
    1. 在这个指令的内部获取到当前用户的按钮权限(vuex|本地缓存中)数据
    1. 在通过binding.value获取到自定义制定属性值的数据
    1. 判断从vuex|本地缓存中获取到的按钮权限数据是否包含了自定义指令包含的权限
    1. 如果不包含,我们在设置el.style.display = “none”,或者使用el.parentnode.removeChild(el)删除当前 按钮元素
<el-button v-permission="[$route.path, 'add']">添加</el-button>
directives: {
        // 检测全选的指令
        permission: {
            // 绑定此指令的标签插入到dom节点触发
            inserted(el, bind) {
                // el:绑定该指令标签
                // bind:对象格式 当前绑定指令标签上的数据情况
                // 获取按钮上的value值,就是用户当前要使用的权限和请求的路由地址
                let value = bind.value//['/user','add']
                //模拟后端返回的当前角色对应的权限
                let rules = {
                    '/menu': ['add', 'edit'],
                    "/user": [ 'edit', 'remove'],
                    "/Goods": ['add']
                }
                // 根据访问的路由地址获取该模块的操作权限
                let allow = rules[value[0]]
                // 检测当前操作是否合法
                if (!allow.includes(value[1])) {
                    // 不合法隐藏操作按钮
                    el.style = "display:none"
                }
            }
        }
 }

四 、 数据权限

  • 数据权限就是不同的角色用户看到的表格数据是不一样的
  • 比如张三是项目经理就可以看到某一个业务表格中的所有数据和字段信息
  • 李四是普通员工只能看到表格中自己的数据
  • 代码实现: 前端在请求头统一封装,携带用户信息,最后由后端检测该用户权限解析返回对应的数据即可;
import axiOS from 'axios'
import router from '@/router'

const request = axios.create()

// 映射
const actionMapping = {
  get: 'view',
  post: 'add',
  put: 'edit',
  delete: 'delete'
}

// request.defaults.baseURL = 'Http://127.0.0.1:7001' // 注释掉之后调的接口将是Mock数据

// 请求拦截器
request.interceptors.request.use(req => {
  // console.log(req.url)
  // console.log(req.method)
  if (req.url !== '/login' && req.url !== '/roles') {
    // 不是登录的请求 也不是获取权限的请求 则在请求头中加入token  不知道如何使用Mock来验证请求头中的token 故此处注释
    // req.headers.Authorization = sessionStorage.getItem('token')
    const action = actionMapping[req.method]
    // 判断非权限范围内的请求
    // console.log(router)
    const currentRight = router.currentRoute.meta
    // console.log(currentRight)
    if (currentRight && currentRight.indexOf(action) === -1) {
      // 没有权限
      alert('没有权限')
      return Promise.reject(new Error('没有权限'))
    }
  }
  return req
})


export default request

以上就是详解vue各种权限控制与管理的实现思路的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 详解vue各种权限控制与管理的实现思路

本文链接: https://lsjlt.com/news/207203.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解vue各种权限控制与管理的实现思路
    本篇文章给大家带来了关于vue的相关知识,其中主要详细介绍了vue各种权限控制与管理的实现思路,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。一、 菜单权限菜单权限:控制用户在系统中能够看到哪些菜单项菜单权限指的就是后台系统中的左侧的菜...
    99+
    2023-05-14
    前端 Vue.js Vuex
  • vue各种权限控制与管理实现的方法是什么
    这篇“vue各种权限控制与管理实现的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue各种权限控制与管理实现的方...
    99+
    2023-07-05
  • Vue实现两种路由权限控制方式
    目录方式一:路由元信息(meta)方式二:动态生成路由表(addRoutes)路由权限控制常用于后台管理系统中,对不同业务人员能够访问的页面进行一个权限的限制。 对于无权限的页面可...
    99+
    2024-04-02
  • vue权限控制与管理的实现方法是什么
    本篇内容介绍了“vue权限控制与管理的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、 菜单权限菜单权限:控制用户在系统中能...
    99+
    2023-07-05
  • vue如何实现路由权限控制
    这篇“vue如何实现路由权限控制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何实现路由权限控制”文章吧。在Vue中...
    99+
    2023-07-06
  • Spring Security权限管理实现接口动态权限控制
    目录摘要前置知识数据库设计数据库表结构数据库表介绍ums_adminums_roleums_admin_role_relationums_menuums_resourceums_re...
    99+
    2024-04-02
  • Vue element实现权限管理业务流程详解
    目录展开渲染标签编辑权限对话框内树形组件编辑权限展示所有权限 添加 编辑 删除 角色 都与上一篇 用户类似 只是接口不同 我们只关注其他不一样的: 展开渲染标签编辑权限 el-tab...
    99+
    2024-04-02
  • RBAC权限控制的实现原理
    本篇内容介绍了“RBAC权限控制的实现原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • vue-router如何实现路由懒加载和权限控制
    本篇内容主要讲解“vue-router如何实现路由懒加载和权限控制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue-router如何实现路由懒加载和权限控制”吧!1、为什么要使用路由懒加载呢...
    99+
    2023-07-04
  • vue-element-admin按钮级权限管控的实现
    目录思路表结构与数据实现按钮调用随着软件的发展,网站从最初的满足用户业务需求到提升用户。就比如一个按钮只要求权限方面的管控我们可以通过 shiro,注解等方式来实现,但是页面上用户点...
    99+
    2024-04-02
  • 详解springboot shiro jwt实现权限管理
    springboot + shiro + jwt (详情解析+代码实现)加密接口 设置权限 首先需要把shiro的几个配置类给下载好(我已经把需要的配置类给放到了github和网盘之...
    99+
    2024-04-02
  • redis 实现登陆次数限制的思路详解
    title: redis-login-limitation  利用 redis 实现登陆次数限制, 注解 + aop, 核心代码很简单. 基本思路 比如希望达到的要求是这样: 在 1min 内登...
    99+
    2024-04-02
  • MySQL用户与权限的管理详解
    本文实例讲述了MySQL用户与权限的管理。分享给大家供大家参考,具体如下: 用户连接到MySQL,可以做各种查询,这都是MySQL用户与权限功能在背后维持着操作。 用户与数据库服务器交互数据,分为两个阶...
    99+
    2024-04-02
  • vue-router中怎么实现路由懒加载和权限控制
    今天就跟大家聊聊有关vue-router中怎么实现路由懒加载和权限控制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、为什么要使用路由懒加载呢用v...
    99+
    2024-04-02
  • vue登录路由权限管理的项目实践
    目录前言登录验证路由配置权限管理总结前言 在开发Web应用程序时,常常需要进行登录验证和权限管理。Vue是一款流行的JavaScript框架,提供了一套灵活的路由管理工具,可以方便地...
    99+
    2023-05-16
    vue登录路由权限管理 vue登录路由权限
  • vue后台管理系统权限控制的示例分析
    这篇文章主要介绍vue后台管理系统权限控制的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!权限控制需求因为是单页面应用,路由交给前端来控制,对于一些需要特定权限才能查看的信息...
    99+
    2024-04-02
  • 汇编语言系列之汇编实现各种码制的转换(思路详解)
    目录1.十六进制转换为二进制数设计1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运行结果及分析:2.十六进制转换为十进制数设计2.1设计要求:2.2设计思路:2.3程序清...
    99+
    2024-04-02
  • MySQL权限控制和用户与角色管理实例分析讲解
    目录一、mysql用户登录二、用户管理三、权限控制四、角色管理一、MySQL用户登录 一般在本机上我们的登录命令:mysql -u root -p+密码 这里介绍命令的作用:-u  指定用户名-h &...
    99+
    2022-12-01
    MySQL权限控制 MySQL用户与角色管理
  • Vuerouter的addRoute方法实现控制权限方法详解
    目录路由分为静态路由和动态路由静态路由和动态路由的优缺点动态路由实现思路动态路由遇到的问题与解决方式路由分为静态路由和动态路由 静态路由和动态路由的优缺点 1、中大型项目,采用的都是...
    99+
    2024-04-02
  • Vue3纯前端实现Vue路由权限的方法详解
    目录前言RBAC模型代码实现登录菜单信息动态路由筛选总结前言 在开发管理后台时,都会存在多个角色登录,登录成功后,不同的角色会展示不同的菜单路由。这就是我们通常所说的动态路由权限,实...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作