vue按钮权限的实现

62 篇文章 1 订阅
11 篇文章 0 订阅

权限按钮就是不同的用户等级的用户可以进行操作也不同

  • 登录成功之后,取到当前用户的权限并存储到状态管理中

  // 用于存储数据
    state: () => ({
        user: new UserInfo(), // 用户信息
        loginInfo: {//用于存储用户账号密码
            username: '',
            password: ''
        }
    }),
    /**
     * 对state数据做一些逻辑操作(用户权限列表)
     * @param state 状态管理的数据
     * @return 权限列表
     */
    getters:{
        permissionList:state=>{//获取用户信息中的perms数据
            return state.user.perms
        }
    },
  • 然后在main.ts中定义一个函数(自定义指令),参数1:自定义指令名称,参数2:在钩子函数(挂载之后)传两个参数el和binding,el是绑定指令元素对象,binding是指令所传递的数据

  • 获取到状态管理数据

  • 然后获取状态管理中存储的用户权限与自定义指令传递过来的值进行判断是否相等不相等就将节点移除

app.directive("permission", {//参数1:自定义指令名称,参数2:钩子函数
    mounted(el, binding) {//挂载之后 参数1:绑定指令元素对象 参数2:指令所传递的数据
        const store = useUserStore()//获取到状态管理数据
        let values = binding.value//再获取到指定义指令得值(也就是获取到状态管理里面的权限列表)
        let permissionList=store.permissionList || []//[]作用是防止空指针异常
        if(-1===permissionList.indexOf(values)){//判断是否有权限
            el.remove?.()//移除节点
        }
    }
})
  • 在按钮中,以v-加上自定义名称来使用,如添加系统指令一样(v-permission自定义指令)

<el-button type="primary" v-permission="'product:groupshop:create'" :icon="Plus" @click="addGroup">添加</el-button>

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> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值