在项目中,除了路由权限,最常见的就是按钮级权限,那么如何实现按钮级权限呢?

1、首先,一般后端会返回该用户的按钮权限有哪些

//假设这是后端返回用户权限的接口
const getLoginUser=function() {
			Api.fetchUser().then((res) => {
		//假设res=['add','delete','edit']
		//那么res中的这些值就是页面中需要显示的按钮,新增  删除  编辑
		//我们需要把这些权限存起来,可以使用localStorage进行存储
        //也可以使用Pinia/Vuex
		 localStorage.setItem('BUTTON_CODE_LIST', res)
		})
	},

2、我们需要在,需要去设置按钮权限的页面,进行判断

<template>
<div>
    <a-button type="primary" @click="add" v-if="hasPermission('add')">新增</a-button>
    <a-button @click="edit" v-if="hasPermission('edit')">编辑</a-button>
    <a-popconfirm title="确定删除?" @confirm="remove(record)" ok-text="确定" cancel-text="取消">
        <a-button v-if="hasPermission('delete')">删除</a-button>
    </a-popconfirm>
</div>
</template>
<script setup lang="ts">
// 获取按钮权限列表
//注意: 这里需要用 JSON.parse() 解析存储的 JSON 字符串,
//并提供一个默认值(空数组 [])以防 BUTTON_CODE_LIST 不存在
const buttonCodeList = ref<any>(
  JSON.parse(localStorage.getItem('BUTTON_CODE_LIST') || '[]'
));

/**
 * 检查是否有权限
 * @param code 
 */
 //这个函数的作用是 检查当前用户是否有某个按钮/操作的权限,
 //它接收一个权限代码 code,并返回 true 或 false,表示用户是否拥有该权限。
 //结合 v-if,可以控制哪些按钮对当前用户可见
 const hasPermission = (code: string) => {
    return buttonCodeList.value.includes(code);
};
</script>

解释一下为什么需要用JSON.parse() 解析:
        localStorage 只能存储字符串,所以如果你存的是数组或对象,需要用 JSON.stringify() 转换后存储。读取时需要用 JSON.parse() 转换回原始数据结构。
        localStorage.getItem('BUTTON_CODE_LIST') 返回的是一个字符串,而你的 buttonCodeList 应该是一个数组,所以需要JSON.parse() 解析。

这样就可以实现前端按钮级权限的展示或者隐藏了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值