IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue权限管理---按钮权限如何写? -> 正文阅读

[JavaScript知识库]vue权限管理---按钮权限如何写?

vue权限管理---按钮权限如何写?

一、问题描述

我们都知道前端权限控制主要也就四个方面
1、菜单的控制

在登录请求中,会得到权限数据(有可能后端会返回完整的路由,也有可能只返回一个路径数组,前端按情况去做相应代码编写即可)这个需要后端返回的数据支持,前端根据权限数据,展示对应的菜单,点击菜单,才能看到相关的界面

2、界面的控制

如果用户没有登录,手动在地址栏敲入管理界面的地址,则需要跳转到登录界面,如果用户已经登录,可是手动敲入非权限内的地址,则需要跳转到404界面

3、按钮的控制

在某个菜单的界面中,还得根据权限数据,展示出可进行操作的按钮,比如增加、删除、修改、查看

4、请求和响应控制

如果用户通过非常规操作,比如通过浏览器调试工具将某些禁用的按钮变成启用状态,此时发的请求,也应该被前端所拦截

这篇文章主要介绍一下按钮的权限控制如何实现

二、方法一

首先是拿到数据, 在后台中, 一般进行权限控制, 是根据用户获取对应的数据, 这里我是通过登录获取到返回的权限数组,然后将其保存到vuex中的state里,如下图所示,此时这个用户只能删除权限

在这里插入图片描述

自定义指令, 用来判断按钮是否展示, 创建 premission.js 文件
import Vue from 'vue'
import store from '../store/index.js'
//自定义指令,用来控制按钮权限
Vue.directive('permission', {
  inserted (el, binding) {
    // 当前按钮传递的值( v-permission="'add'" 中的值)
    const currentTag = binding.value.action
    const effect = binding.value.effect
    // 获取到存放在 store 中的权限数据
    const currentRight = store.state.user.role.rights
    // 判断是否存在对应的按钮权限
    let item = currentRight.filter((item) => {
      return item === currentTag
    })
    //不具备权限则删除(隐藏)或者禁用该按钮 (el.parentNode 获取当前节点的父节点),根据在芫荽绑定的值去决定
    if (item.length === 0) {
      if (effect === 'disabled') {
        el.disabled = true
        el.classList.add('is-disabled')
      } else {
        el.parentNode.removeChild(el)
      }
    }
  }
})
在页面中使用按钮时, 用上自定义的 v-premission 指令

如下图,有两个按钮,一个编辑按钮,一个删除按钮,但是一句上面返回的权限,只有删除权限,按照下图的代码,那么此时,我们在页面上应该可以看到编辑按钮是被禁用的,删除按钮时可用的。
在这里插入图片描述

最终的效果
在这里插入图片描述
注意:在vue3中,使用方式有所不同

permission.js文件

import App from './App.vue'
import store from '../store/index.js'
const app = createApp(App);

app.directive('permission', {
   mounted(el, binding) {
      // 当前按钮传递的值( v-permission="'add'" 中的值)
	    const currentTag = binding.value.action
	    const effect = binding.value.effect
	    // 获取到存放在 store 中的权限数据
	    const currentRight = store.state.user.role.rights
       // 判断是否存在对应的按钮权限
	    let item = currentRight.filter((item) => {
	      return item === currentTag
	    })
	    //不具备权限则删除(隐藏)或者禁用该按钮 (el.parentNode 获取当前节点的父节点),根据在芫荽绑定的值去决定
	    if (item.length === 0) {
	      if (effect === 'disabled') {
	        el.disabled = true
	        el.classList.add('is-disabled')
	      } else {
	        el.parentNode.removeChild(el)
	      }
    	}
   }
})

三、方法二

第一种方法是使用自定义指令用来做权限,第二种方法是使用函数来判断是否有权限。

首先是拿到数据, 在后台中, 一般进行权限控制, 是根据用户获取对应的数据, 这里我是通过登录获取到返回的权限数组,然后将其保存到vuex中的state里,如下图所示,此时这个用户只能删除权限

在这里插入图片描述

创建函数, 用来判断按钮是否展示, 创建 premission.js 文件
import store from '../store/index.js'
//第二种方式
/**
 * 判断是否有权限。根据传入的权限标识,查看是否存在于用户的权限标识集合内。
 */
export function hasPermission (perms) {
  let hasPermission = false;
  let permission = store.state.user.role.rights
  for (let item of permission) {
    if (item === perms) {
      hasPermission = true;
      break;
    }
  }
  return hasPermission;
}

在页面中使用按钮时, 先导入这个文件,在methods中写一个方法,然后应用在按钮上

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果和上图是一样的。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:23:13  更:2022-03-12 17:26:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:36:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码