首页 > 其他分享 >vue3 组件级权限控制

vue3 组件级权限控制

时间:2024-05-31 22:57:30浏览次数:22  
标签:permission 页面 vue3 组件 权限 props permissions

权限控制程度分为:1. 页面级 2. 组件级 3. 代码级

1. 页面级

这是大部分前端遇到的级别。依靠路由守卫,如果没有权限,就看不到菜单,就进不到页面。不会给页面带来侵入性。什么是侵入性,就是写页面组件的时候,还要考虑权限。

2. 组件级

有没有权限都可以看到页面组件,但是不同权限的人,看到的东西不同。比如按钮,没有权限的操作不了,或者看不到这个按钮。这就会产生一些侵入性,写页面组件的时候,需要考虑到权限。

我们现在要做的就是尽量减少组件级权限控制带来的侵入性。如果权限只是控制可见度的话,我们还可以做优化,如果是不同权限,点击按钮调用不同函数的话,那就不好优化了。现在针对第一种情况来优化。

我们可以用一个权限组件将需要权限控制的组件包裹住。给属性 permissions 传入参数 ,如果权限包含 'sys:user:add' 就显示按钮。

<Authority permissions="sys:user:add">
  <button>新增用户</button>
</Authority>

<Authority :permissions="['sys:user:view', 'sys:user:update']">
  <button>新增用户</button>
</Authority>

如果权限控制的不是显示隐藏,而是控制的能否点击呢,我们这个组件可以交还一些控制权,让开发人员根据情况去控制。通过作用域插槽,返回用户的所有权限 userPermissions。

<Authority>
  <template #default="{ userPermissions }">
    <button :disabled="!userPermissions.includes('sys:user:add')">新增用户</button>
  </template>
</Authority>

我们这个组件提供了两个功能:一个预设的可见不可见,一个让开发者自行处理。代码如下:

<template>
  <slot v-if="showSlot" :userPermissions="permissions"></slot>
</template>

<script setup>
  import { computed } from "vue";
  import { useAuth } from "./useAuth.js";

  const props = defineProps({
    permission: {
      type: [String, Array],
    },
  });

  const { permissions } = useAuth();
  const showSlot = computed(() => {
    if (!props.permission) {
      // 没传入权限,直接显示
      return true;
    }
    if (!permissions) {
      // 没有任何权限,直接隐藏
      return false;
    }

    if (Array.isArray(props.permission)) {
      return props.permission.every((p) => permissions.includes(p));
    } else {
      return permissions.includes(props.permission);
    }
  });
</script>

3. 代码级(函数级)

哪些权限的人可以调用这个函数,哪些不可以。或者调这个函数产生不同的结果。但是这种情况很少。

标签:permission,页面,vue3,组件,权限,props,permissions
From: https://blog.csdn.net/weixin_64684095/article/details/139362878

相关文章

  • vue3 语法测试
    Home.vue<template><divclass="home"><div>{{fone}}</div><div>{{ftwo}}</div><div>{{ffour}}</div><div>{{ffive}}......
  • vue3组件通信与props
    title:vue3组件通信与propsdate:2024/5/31下午9:00:57updated:2024/5/31下午9:00:57categories:前端开发tags:Vue3组件Props详解生命周期数据通信模板语法CompositionAPI单向数据流Vue3组件基础在Vue3中,组件是构建用户界面的基本单位,它们是可复用......
  • 【LINUX】LINUX基础(目录结构、基本权限、基本命令)
    文章目录LINUX的目录结构LINUX的基本权限LINUX基本命令LINUX的目录结构/:表示根目录bin:存放二进制可执行文件(命令ls、cat、mkdir等)boot:存放系统引导文件dev:存放设备文件etc:存放系统配置文件home:存放当前用户的文件(~表示当前用户默认目录、…则是上一级目录、-表......
  • ETLCloud中如何使用Kettle组件
    ETLCloud中如何使用Kettle组件在当今数据驱动的时代,数据处理和分析已成为企业决策的关键。为了更高效地处理海量数据,ETL(Extract, Transform, Load)工具变得至关重要。而在众多ETL工具中,Kettle作为一款开源、灵活且功能强大的工具备受青睐。而在ETLCloud平台上,可以通过Kettle组件......
  • 记录一下LogicFlow流程图在vue3中的简单使用,配置左侧菜单工具栏和右键菜单
     最终的效果配置画布首先通过npm安装LogicFlownpminstall@logicflow/core--save在vue页面引用LogicFlow和cssimportLogicFlowfrom"@logicflow/core";import"@logicflow/core/dist/style/index.css"; 创建div容器并添加ref<divid="container"ref=......
  • Vue3-路由详解
    文章目录路由对路由的理解安装VueRouter基本切换效果两个注意点路由器工作模式to的两种写法命名路由嵌套路由路由传参query参数params参数路由的props配置replace属性编程式导航重定向更多相关内容可查看路由附git地址:https://gitee.com/its-a-little-bad/vue......
  • linux修改某类文件权限命令
    bashfind/your/directory-typef-name"*.so*"!-typel-execchmod644{}+这条命令会在/your/directory目录下递归查找所有文件名以.so结尾的文件(共享库文件),并将它们的权限设置为644。!-typel部分确保只有实际的文件(不是符号链接)会被修改权限。请替换/your/......
  • vue3毫秒级时间戳转换
    Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。以下2个方法源自于时间工具包:timeutils效果展示:在线时间戳转换工具时间转时间戳/***将某个时间转化成时间戳*时间格式:2019-05-2000:00:00或2019年5月1日00:00:00*返回值:1556640000000,13......
  • vue3 vite 脚手架生成项目 prettier 自动格式化失败 vscode插件 Vue - Official 解决
    vue3vite脚手架生成项目prettier自动格式化失败vscode插件Vue-Official解决方案问题以前写的都是vue2的项目,自动格式化都用的vetur,都设置好了。现在新弄了个vue3的项目,脚手架起的vitevue3,搞个代码格式化,发现prettier没好事。解决思路格式化一共俩工具eslintpret......
  • 鸿蒙HarmonyOS实战-Web组件(Cookie及数据存储)
    ......