广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >iview 权限管理的实现
  • 222
分享到

iview 权限管理的实现

2024-04-02 19:04:59 222人浏览 泡泡鱼
摘要

目录iview-admin2.0自带的权限管理根据权限控制组件展示自定义auth指令自定义auth组件总结iview-admin2.0自带的权限管理 iview-admin2.0自

iview-admin2.0自带的权限管理

iview-admin2.0自带权限管理,可以通过设置路由的meta对象的参数access来分配权限。
默认的角色是super_admin和admin,现在我们给文档这个侧边栏项目分配一个只有user才能查看的权限


  {
    path: '',
    name: 'doc',
    meta: {
      title: '文档',
      href: 'https://lison16.GitHub.io/iview-admin-doc/#/',
      icon: 'iOS-book',
      access: ['user']
    }
  },

侧边栏就不会显示文档这个栏目了。在src/store/module/app.js中获取menuList,这个就是侧边栏的list


  getters: {
    menuList: (state, getters, rootState) => getMenuByRouter(routers, rootState.user.access),
    errorCount: state => state.errorList.length
  },

这个getter方法主要是执行了getMenuByRouter,接着查看src/libs/util.js找到具体代码



export const getMenuByRouter = (list, access) => {
  let res = []
  forEach(list, item => {
    if (!item.meta || (item.meta && !item.meta.hideInMenu)) {
      let obj = {
        icon: (item.meta && item.meta.icon) || '',
        name: item.name,
        meta: item.meta
      }
      if ((hasChild(item) || (item.meta && item.meta.showAlways)) && showThisMenuEle(item, access)) {
        obj.children = getMenuByRouter(item.children, access)
      }
      if (item.meta && item.meta.href) obj.href = item.meta.href
      if (showThisMenuEle(item, access)) res.push(obj)
    }
  })
  return res
}

const showThisMenuEle = (item, access) => {
  if (item.meta && item.meta.access && item.meta.access.length) {
    if (hasOneOf(item.meta.access, access)) return true
    else return false
  } else return true
}

到这里,access判断权限的过程就比较明白了。代码会获取state里存放的用户信息,主要是access,然后和路由允许的access进行比对,如果用户的access在路由access列表允许的范围内就确权,例如用户access的['admin','super_admin'],但是我们把文档的access设置为['user'],


hasOneOf(['admin','super_admin'],['user']) // false,鉴权失败

hasOneOf是iview-admin的工具方法。用于判断要查询的数组是否至少有一个元素包含在目标数组中,详细代码放在底部。

根据权限控制组件展示

一般我们还需要根据权限去控制页面元素的展示,比如按钮。有两种方法,一种是自定义auth指令,或者自定义一个鉴权组件用来包裹需要鉴权的元素。

自定义auth指令

iview-admin把自定义指令统一放在src/directive文件夹下,directives.js文件负责引入单独定义在各个文件的自定义指令,统一导出。我们实现一个auth指令:


import draggable from './module/draggable'
import clipboard from './module/clipboard'
import auth from './module/auth'
const directives = {
  draggable,
  clipboard,
  auth
}
export default directives

然后在src/directive/index.js中导出了一个importDirective方法,入参是Vue,逻辑是注册指令。


import directive from './directives'

const importDirective = Vue => {
  
  Vue.directive('draggable', directive.draggable)
  
  Vue.directive('clipboard', directive.clipboard)
  Vue.directive('auth', directive.auth) 
}

export default importDirective

这个importDirective方法在main.js里面被用到了,并且把真实的Vue传入做为入参。


import importDirective from '@/directive'

importDirective(Vue)
...

编辑src/directive/module/auth.js


import store from '@/store'
export default {
  inserted: (el, binding, vnode) => {
    const value = binding.value
    const access = store.state.user.access
    if (access.indexOf(value) === -1) {
      el.remove()
    }
  }
}

我们新增一个auth指令,并导出。在注入的时候进行权限判断,如果确权成功就不做什么,如果失败就把元素删除。
使用试试,拿顶部的折叠菜单按钮做例子,beader-bar.vue


<template>
  <div class="header-bar">
    <sider-trigger v-auth="'admin'" :collapsed="collapsed" icon="md-menu" @on-change="handleCollpasedChange"></sider-trigger>
    ...
  </div>
</template>

当v-auth="'admin'"的时候显示按钮,如果是user则会隐藏按钮。

自定义auth组件

也可以通过自定义auth组件的方式来实现,创建一个函数式组件auth.vue


<script>
import store from '@/store'
export default {
  functional: true,
  props: {
    authority: {
      type: String,
      require: true
    }
  },
  render (h, context) {
    const { props, scopedSlots } = context
    const access = store.state.user.access
    return access.indexOf(props.authority) > -1 ? scopedSlots.default() : null
  }
}
</script>

如果确权成功就返回slot,否则返回null,这样被auth包裹的元素就不会展现了。然后把auth.vue注册为全局组件,免得每次使用都要import一下。编辑main.js


import Auth from '_c/auth/auth.vue'
// 注册组件
Vue.component('Auth',Auth)

使用的时候直接用auth包裹组件即可


<template>
  <div class="header-bar">
    <Auth authority="user">
      <sider-trigger :collapsed="collapsed" icon="md-menu" @on-change="handleCollpasedChange"></sider-trigger>
    </Auth>
  </div>
</template>

总结

不论是用组件式的写法还是自定义指令都能实现,组件的方式实现要写的代码多一点,用自定义指令比较灵活,此外有一点不同,自定义指令如果确权失败,是把元素直接删除掉了,所以此时如果再由admin改为user,元素还是不会展示的,因为已经被删除了嘛,需要刷新一下页面才能显示出来,但是如果是组件式的就不会,能够灵活响应。这个一般影响不大。

注意到我把access设置为了一个String,如果设置为一个数组也可以,iview自带的hasOneOf方法可以很好的使用



export const hasOneOf = (targetarr, arr) => {
  return targetarr.some(_ => arr.indexOf(_) > -1)
}

到此这篇关于iview 权限管理的实现的文章就介绍到这了,更多相关iview 权限管理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: iview 权限管理的实现

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

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

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

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

下载Word文档
猜你喜欢
  • iview 权限管理的实现
    目录iview-admin2.0自带的权限管理根据权限控制组件展示自定义auth指令自定义auth组件总结iview-admin2.0自带的权限管理 iview-admin2.0自...
    99+
    2022-11-12
  • Mysql 用户权限管理实现
    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 。 mysql权限表的验证过程为: ...
    99+
    2022-05-25
    Mysql 用户权限管理
  • Spring Security权限管理实现接口动态权限控制
    目录摘要前置知识数据库设计数据库表结构数据库表介绍ums_adminums_roleums_admin_role_relationums_menuums_resourceums_re...
    99+
    2022-11-13
  • MySQL中怎么实现权限管理
    MySQL中怎么实现权限管理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.用户权限简介当我们创建过数据库用户后,还不能执行任何操作,需...
    99+
    2022-10-18
  • Django如何实现RBAC权限管理
    目录Django RBAC权限管理概述流程图总结Django RBAC权限管理 概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定...
    99+
    2022-12-20
    Django RBAC权限管理 Django RBAC RBAC权限管理
  • java怎么实现管理员权限
    在Java中,可以使用以下几种方式实现管理员权限:1. 使用if-else语句或switch语句判断管理员权限:```javaStr...
    99+
    2023-08-24
    java
  • MySQL如何实现用户管理与权限管理
    这篇文章主要为大家展示了“MySQL如何实现用户管理与权限管理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何实现用户管理与权限管理”这篇文章吧。 ...
    99+
    2022-10-18
  • springboot权限管理功能怎么实现
    本篇内容介绍了“springboot权限管理功能怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能清单菜单管理:可以实现对后台管理系...
    99+
    2023-07-02
  • 如何实现mysql用户权限管理
    这篇文章主要讲解了如何实现mysql用户权限管理,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。本文内容:什么是用户权限恰当的用户权限查看权限修改权限删除权限首发日期:2018-...
    99+
    2022-10-18
  • 详解springboot shiro jwt实现权限管理
    springboot + shiro + jwt (详情解析+代码实现)加密接口 设置权限 首先需要把shiro的几个配置类给下载好(我已经把需要的配置类给放到了github和网盘之...
    99+
    2022-11-12
  • Mysql如何实现用户权限管理
    小编给大家分享一下Mysql如何实现用户权限管理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. MySQL 权限介绍mysql中存在4个控制权限的表,分别为u...
    99+
    2023-06-15
  • Java如何实现权限管理系统
    这篇文章主要介绍了Java如何实现权限管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统。...
    99+
    2023-06-22
  • MYSQL数据库管理中怎么实现权限管理
    本篇文章为大家展示了MYSQL数据库管理中怎么实现权限管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 MYSQL权限简介关于mysql的权限简单的理解就是m...
    99+
    2022-10-18
  • 【Linux】- 权限管理
    Linux权限管理 1、Shell命令以及运行原理2、权限2.1用户2.2 对角色和文件操作2.3 Linux下文件的权限2.4权限的表示2.4.1 字符表示法2.4.2 8进制数字表示法 ...
    99+
    2023-09-13
    linux 服务器
  • mysql-权限管理
    一、grant 授权(创建用户并授权,此方式创建的用户拥有创建数据库、表等): grant 权限类型 on 库.表/函数/存储过程 to '用户名'@'主机' [ identified by 'testpa...
    99+
    2022-10-18
  • mysql权限管理
    2019/5/20 星期一 //这是mysql的权限问题 具体的详情见 第三章 《mysql用户及赋予用户权限grant》现在有一个需求,就是指定一个用户对一个数据库中的所有表只有只读权限mysql用户...
    99+
    2022-10-18
  • mongodb权限管理
    今晚苦逼加班,就稍微梳理下mongodb的权限境配置,在安装配置好一套mongodb后,需要创建相应的数据库和用户密码给开发人员,那么权限改如何设置呢?1.首先要创建数据库use chunqiu2.创建用户...
    99+
    2022-10-18
  • 【Linux】权限管理
    文章目录 1. shell命令以及运行原理2. Linux权限的概念3. Linux权限管理3.1 文件访问者的分类3.2 文件类型和访问权限文件类型file指令文件权限 4. 文件...
    99+
    2023-09-04
    linux windows 服务器
  • Java实战权限管理系统的实现流程
    springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统。 共五个模块,角色管理,菜单管理,实验室管理,学生管理,管理员管理。 角色管理分一个超级管理员,编辑...
    99+
    2022-11-12
  • spring aop实现用户权限管理的示例
    AOP 在实际项目中运用的场景主要有 权限管理(Authority Management)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging) ...
    99+
    2023-05-30
    spring aop 权限
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作