iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue各种权限控制与管理实现的方法是什么
  • 813
分享到

vue各种权限控制与管理实现的方法是什么

2023-07-05 17:07:04 813人浏览 薄情痞子
摘要

这篇“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)的时候,调用initDynamicRoutesexport 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

三、 按钮权限

所谓的按钮权限是指在某个菜单的界面中,我们需要根据后端返回的该角色当前操作模块中对应的按钮权限数据,展示出可进行操作的按钮,比如删除,修改,增加等按钮.

如果要实现按钮的权限控制,我们需要使用vue的自定义指令去实现: 首先需要创建一个按钮权限控制的指令,我们定义这个指令的名称为: v-permission

在这个指令的内部获取到当前用户的按钮权限(vuex|本地缓存中)数据

在通过binding.value获取到自定义制定属性值的数据

判断从vuex|本地缓存中获取到的按钮权限数据是否包含了自定义指令包含的权限

如果不包含,我们在设置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://www.lsjlt.com/news/353917.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++中函数返回值的类型是由什么决定的
    在 c++ 中,函数返回值类型由其函数原型的类型决定,包括:函数原型指定返回值类型:在函数名称后跟冒号,再跟返回值类型。默认返回值类型为 int:如果不指定返回值类型,默认类型为 int...
    99+
    2024-05-14
    c++
  • 在c++中,什么叫函数的返回值
    在 c++ 中,函数只能返回一个值。解决方法:引用传递、结构体或类、out 参数。没有返回值的函数可以使用 void 类型,表示不返回任何值。 什么是 C++ 中函数的返回值? 在 C...
    99+
    2024-05-14
    c++
  • c++中static的作用和用法
    c++ 中的 static 关键字用于声明静态变量、函数或类成员,使其在程序生命周期内存在或与类的每个实例关联。具体用法如下:静态变量:在函数外声明,仅创建一份副本,在程序启动时初始化且...
    99+
    2024-05-14
    c++
  • static在c和c++中的区别
    static关键字在c和c++中用于控制变量的生命周期和作用域。在c中,它延长局部变量和限制全局变量的作用域。在c++中,它还用于定义类成员变量和函数、命名空间中的变量和函数,以及函数内...
    99+
    2024-05-14
    c语言 c++ 作用域
  • c++中a++与++a的区别
    c++ 中 a++ 和 ++a 区别:后缀递增 a++ 先返回原始值,再递增;前缀递增 ++a 先递增,再返回递增后的值。 C++ 中 a++ 与 ++a 的区别 在 C++ 中,a+...
    99+
    2024-05-14
    c++
  • if else在c++中的用法
    在 c++ 中,if else 语句根据条件执行不同代码块的语法为:if (condition) { } else { }。它可用于:检查数字是否为正数根据条件执行嵌套 if els...
    99+
    2024-05-14
    c++
  • struct在c和c++中的区别
    c和c++中struct的区别包括:c中成员默认公开访问,c++中默认私有访问。c++可以在struct定义中初始化成员,c中不允许。c++支持成员函数,c不支持。c++不支持匿名str...
    99+
    2024-05-14
    c++
  • c++中的所有函数都是传值调用吗
    函数调用类型可分为传值调用和引用调用,默认采用传值调用,传值调用中形参接收实参副本,引用调用中形参接收实参引用,对形参进行的修改也会影响实参。 C++中的函数调用类型 C++中,函数调...
    99+
    2024-05-14
    c++
  • c++中ifdef的用法
    c++ 中的 #ifdef 预处理器指令用于根据预定义宏是否存在来编译或不编译代码块。它的语法是 #ifdef ,其作用包括:检查宏是否存在,如果宏已定义,则编译其后的代码块;实现条件编...
    99+
    2024-05-14
    c++
  • c++中的函数调用有哪几种方式?它们有什么区别
    c++ 中的函数调用方式有 4 种:值传递(复制实参值,不影响实参)、引用传递(传递实参地址,修改形参值会修改实参)、指针传递(传递实参指向的内存地址,修改指向的值会影响实参)、rval...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作