vue3 实现按钮权限管理

在做后台管理系统时,经常会有权限管理的功能,这里来记录一下关于按钮权限管理的实现方法

1、自定义指令 v-permission。新建js文件用来写指令代码。

export default function btnPerms(app) {
    app.directive('permission', {
        mounted(el, binding) {
            if (!permsJudge(binding.value)) {
                el.parentNode.removeChild(el);
            }
            function permsJudge(value){
                let perms = JSON.parse(localStorage.getItem('perms')) || [];
                for (let item of perms) {
                    if (item === value) {
                        return true;
                    }
                }
                return false;
            }
        }
    });
}

2、在main.js里注入;

3、在登录后台时获取后端返回的用户权限数据,并且存入到本地;我这边是把获取数据的接口放在vuex中的

async _getUserPermission(contxt,payload){
     let res = await getUserPermission();
     if(res && res.data){
        let {code,data,message} = res.data;
        if(code == 200){
           localStorage.setItem('perms',JSON.stringify(data.resourceList));
           contxt.commit('getPerObj',data.resourceList);
        }else {
           reject(message)
        }
    }
}

然后在登录页面调用这个方法;也可以直接在登录页面获取数据,这里就不赘述了。

 获取的数据大概是这个格式

 4、在需要判断权限的按钮调用指令;

 这样就可以实现按钮权限了,如有问题,欢迎留言!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3 中,可以使用指令(directive)和组件(component)实现按钮权限控制。以下是一个示例代码: 1. 定义一个指令(directive)用于判断当前用户是否有权限: ```javascript import { Directive } from 'vue'; export const hasPermission: Directive = { beforeMount(el, binding) { // 获取当前用户的权限列表 const permissions = ['add', 'edit', 'delete']; // 判断指令绑定的值是否在权限列表中 if (!permissions.includes(binding.value)) { // 如果没有权限,则禁用按钮 el.disabled = true; } }, }; ``` 2. 在需要控制权限按钮上使用该指令: ```html <template> <button v-has-permission="'add'">添加</button> <button v-has-permission="'edit'">编辑</button> <button v-has-permission="'delete'">删除</button> </template> ``` 3. 可以将该指令封装为一个全局组件: ```javascript import { createApp } from 'vue'; import { hasPermission } from './directives/hasPermission'; const app = createApp(App); // 注册全局指令 app.directive('has-permission', hasPermission); // 其它代码... app.mount('#app'); ``` 4. 这样在组件中就可以直接使用该组件了: ```html <template> <permission-button permission="add">添加</permission-button> <permission-button permission="edit">编辑</permission-button> <permission-button permission="delete">删除</permission-button> </template> <script> import PermissionButton from './components/PermissionButton.vue'; export default { components: { PermissionButton, }, }; </script> ``` 其中 `PermissionButton.vue` 组件的代码如下: ```html <template> <button v-has-permission="permission"><slot></slot></button> </template> <script> export default { props: { permission: { type: String, required: true, }, }, }; </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值