vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3 v-permission指令

Vue3如何自定义v-permission权限指令

作者:头发秃头小宝贝

这篇文章主要为大家详细介绍了Vue3如何编写一个 v-permission 指令来根据用户权限动态控制元素的渲染,感兴趣的小伙伴可以参考一下

在 Vue3 + TypeScript 项目中,可以通过自定义指令来控制元素的显示与隐藏,实现权限管理功能。本文将详细介绍如何编写一个 v-permission 指令来根据用户权限动态控制元素的渲染。

功能概述

v-permission 是一个自定义指令,作用如下:

实现步骤

1. 新建 directives/permission.ts

在项目的 directives 目录下新建 permission.ts,内容如下:

import { App, DirectiveBinding } from 'vue';
import store from '@/store';

// 判断是否有权限
const hasPermission = (value: Array<string>, el: Element) => {
  // 检查是否配置了权限参数
  if (!Array.isArray(value) || value.length === 0) {
    throw new Error(`v-permission 需要配置权限,例如 v-permission="['xxx']"`);
  }

  // 获取用户权限
  const ruleNames: Array<string> = store.getters['menu/getRuleNames'] || [];
  if (!Array.isArray(ruleNames)) {
    console.warn('权限数据 "menu/getRuleNames" 格式不正确,请检查 store 配置。');
    return;
  }

  // 判断是否有权限
  const hasAuth = value.some((val) => ruleNames.includes(val));
  if (!hasAuth && el.parentNode) {
    el.parentNode.removeChild(el); // 移除元素
  }
  return hasAuth;
};

export default {
  install(app: App) {
    app.directive('permission', {
      mounted(el: Element, binding: DirectiveBinding) {
        hasPermission(binding.value, el);
      },
      updated(el: Element, binding: DirectiveBinding) {
        hasPermission(binding.value, el);
      },
    });
  },
};

功能说明

2. 在 main.ts 中引入指令

main.ts 文件中注册该指令:

import { createApp } from 'vue';
import App from './App.vue';
import store from '@/store';
import permission from '@/directives/permission';

const app = createApp(App);
app.use(store);
app.use(permission); // 注册自定义指令
app.mount('#app');

3. 使用 v-permission 指令

在模板中使用 v-permission 指令,传入权限数组:

<template>
  <div>
    <!-- 用户拥有 'OrderList'权限时显示 -->
    <button v-permission="['OrderList']">有权限的按钮</button>

    <!-- 仅管理员权限时显示 -->
    <div v-permission="['admin']">仅管理员可见内容</div>
  </div>
</template>

4.权限数据说明

假设 store.getters['menu/getRuleNames'] 返回如下权限数组:

['OrderList', 'admin', 'user:read']

完整流程回顾

注意事项

总结

通过 v-permission 自定义指令,可以在 Vue3 项目中轻松实现权限控制,移除无权限的元素,提升用户体验和项目安全性。根据实际需求,还可以进一步扩展此指令,例如实现隐藏元素而非移除元素、支持多种权限逻辑等。

到此这篇关于Vue3如何自定义v-permission权限指令的文章就介绍到这了,更多相关Vue3 v-permission指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文