首页 > 其他分享 >vue组件级别的权限控制

vue组件级别的权限控制

时间:2023-09-07 23:23:00浏览次数:60  
标签:vue const authority props 组件 权限 permissions

核心思想:尽量减少对组件的侵入性,也就是权限控制的代码剔除出来

实现

authority.vue

<template>
  <div>
  // 将用户权限通过作用域插槽传递出去
    <slot v-if="showSlot" :permissions="rights"></slot>
  </div>
</template>

<script setup lang="ts">

const props = defineProps({
  permissions: {
    type: [String,Array],
    required: true
  },
})

const rights = ref(['user-control','system-control','goods-control'])

const showSlot = computed(()=>{
  // 用户无任何权限
  if(!rights){
    return false
  }
  // 没传入权限
  if(!props.permissions){
    return true
  }
  // 有传入
  if(Array.isArray(props.permissions)){
    return props.permissions.every((item:any)=>rights.value.includes(item))
  }else {
    return rights.value.includes(props.permissions)
  }
})

</script>

<style lang="scss" scoped>

</style>

index.vue

<template>
  <div>
    <authority :permissions="['user-control','system-control']" v-slot="{permissions}">
      <nut-button :disabled="!permissions.includes('system-control')" type="warning">sssss</nut-button>
    </authority>
    <ul>
      <li class="asd">45</li>
      <li>45</li>
      <li>45</li>
    </ul>
    <div class="aaa"></div>
  </div>
</template>

<script setup lang="ts" name="home">
// import { Add } from '@nutui/icons-vue'
import authority from '@/components/authority/authority.vue'

const test = ref('111')
console.log(test)

</script>

<style lang="scss" scoped>
.asd {
  font-size: p2r(32);
  color: green;
}
.aaa {
  width: p2r(200);
  height: p2r(100);
  background-color: pink;
}
</style>

标签:vue,const,authority,props,组件,权限,permissions
From: https://www.cnblogs.com/zychuan/p/17686350.html

相关文章

  • VueJS 处理表单组件上 api 调用的错误
    问题出在可组合项中对errors的处理上。在register函数中,你将errors重新赋值为空对象{},而应该将其赋值给errors.value来保持响应式。修改useAuth可组合项的代码如下:exportdefaultfunctionuseAuth(){leterrors=ref({});constregister=(request)=>{errors.val......
  • Vue中数组操作方法有哪些?
    在Vue中,有一些数组操作方法是专门为了处理响应式数组而提供的。这些方法会触发Vue的响应式更新机制,确保视图能够正确地响应数组的变化。以下是Vue提供的数组操作方法:1:push():向数组末尾添加一个或多个元素,并返回新的长度。this.array.push('newitem');2:pop():移除数组的最后一......
  • Vue的数组操作方法和JavaScript原生数组方法有什么区别?
    Vue的数组操作方法和JavaScript原生数组方法之间存在一些区别,主要体现在对响应式更新的处理上。#####1:响应式更新:Vue数组操作方法是对JavaScript原生数组方法的封装,能够触发Vue的响应式更新机制。这意味着当你使用Vue的数组操作方法修改数组时,Vue会自动检测到数组的变化......
  • 父组件可以监听到子组件的生命周期吗?
    在Vue中,父组件是可以监听到子组件的生命周期的。Vue提供了一些特殊的钩子函数,可以在父组件中监听子组件的生命周期事件。以下是一些常用的方法来监听子组件的生命周期:#####1:使用$emit:在子组件的生命周期钩子函数中,使用$emit方法触发自定义事件,向父组件发送通知。在父组件中,使......
  • 在 Vue 中,子组件如何向父组件传递数据?
    在Vue中,子组件向父组件传递数据可以通过自定义事件来实现。下面是一种常见的方法:在子组件中,使用$emit方法触发一个自定义事件,并传递要传递给父组件的数据作为参数。<template><button@click="sendDataToParent">传递数据给父组件</button></template><script>exportde......
  • 深度理解vue3中选项式语句和组合式语句的区别
    选项式语句和组合式语句是Vue3中的两种不同的编程风格,它们都是用于编写Vue组件的方法。在本文中,我将详细介绍选项式语句和组合式语句的概念、区别和使用场景。选项式语句是Vue3中最常用的编写组件的方式之一。它使用了Vue的选项对象,其中包含了组件的各种选项,如数据、计算......
  • vue-router 路由模式有几种?
    VueRouter提供了三种路由模式:######1:Hash模式(默认):在URL中使用带有#符号的哈希值来管理路由。例如:http://xxxx.com/#/path。在Hash模式下,当URL的哈希值发生变化时,浏览器不会向服务器发送请求,而是通过监听hashchange事件来进行路由导航。######2:History模式:使用HTM......
  • Vue简单浮动标签(simple floating labels)
    简介及使用教程Vue简单浮动标签(simplefloatinglabels)是一个基于Vue.js的简单浮动表单标签组件,支持自定义颜色、边框及错误信息。安装npmivue-simple-floating-labels使用引入组件importFloatingLabelfrom'vue-simple-floating-labels'exportdefault{......
  • Vue 拖拽组件(Draggable)
    简介及使用教程Vue拖拽组件(Draggable)是一个允许与View-Model同步进行拖放排序的Vue组件。这是基于Sortable.js并提供它的所有功能。特点完全支持Sortable.js特性:支持触摸设备支持拖动句柄和可选择的文本智能自动滚动支持在不同列表之间拖放,没有jQuery依赖项保持......
  • 滚动到底部的Vue指令插件
    简介及使用教程VueChatScroll是一个保持可滚动内容滚动到底部的Vue指令插件,用于Vue.js2,当在该元素中添加新内容时,滚动到该元素的底部。安装npmivue-chat-scroll使用importVuefrom'vue'importVueChatScrollfrom'vue-chat-scroll'Vue.use(VueChatScroll)......