网站首页 > 技术文章 正文
前言
在做后台管理系统时,需要根据用户的身份展示对应的页面、资源、按钮等。比如超级管理员在某个页面中具备新增、删除、编辑、查询、下载等按钮操作,部长具备新增、编辑、查询、下载按钮操作,而普通用户只具备查询、下载按钮操作。
思路
- 利用自定义指令v-directive。假设现在是sys系统设置页面中的删除按钮,order订单页面中的编辑按钮,在按钮上使用v-permission指令,判断当前用户是否具备该操作权限,渲染按钮。
- 使用v-if指令,判断用户是否拥有该按钮权限。与上面的做法差不多,只不过v-if不要直接使用在组件上。
创建自定义指令
首先,创建一个名为v-perm的自定义指令。这个指令会接收一个参数,即页面按钮编码,然后根据角色身份判断是否拥有此按钮的操作权限,在页面中动态渲染该按钮。
// directives/permission.js
import { DirectiveBinding } from 'vue';
export default {
mounted(el: HTMLElement, binding: DirectiveBinding<string>) {
const hasPermission = checkPermission(binding.value);
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el); // 如果没有权限,移除该元素
}
},
}
export const checkPermission = ()=>{
const userPermission = getUserPermission()
return userPermission.includes(permission)
}
export const getUserPermission = async ()=>{
//向后端请求获取用户的权限
const [err,res] = await getUserInfo('admin')
...
}
全局注册指令
在 main.js或app.js全局注册这个自定义指令。
import { createApp } from 'vue';
import permissionDirective from './directives/permission';
const app = createApp(App);
// 全局注册指令
app.directive('perm', permissionDirective);
app.mount('#app');
使用自定义指令
<button v-permission="'sys_delete'" > 删除 </button>
<button v-permission="'order_edit'" > 编辑 </button>
使用v-if指令
<button v-if="hasPerm('sys_delete')" > 删除 </button>
<button v-if="hasPerm('order_edit')" > 编辑 </button>
-------------
const hasPerm = async (btn_code)=>{
const userRole = localStorage.getItem('role')
const [err,res] = await getUserBtnPermisson(userRole)//获取该角色拥有的所有按钮操作权限
//res = ['sys_delete','sys_edit','order_edit']
return res.includes(btn_code)
}
猜你喜欢
- 2025-01-15 HTC Hima 近期谍照都是烟雾弹?传前端设计有大更动
- 2025-01-15 花了5、6万耳机退烧史,索尼N3AP、Z1R 、舒尔846 和黑砖、墨菊
- 2025-01-15 前端系列教程-深入理解JavaScript中的DOM
- 2025-01-15 前端知识分享:vue3核心语法,事件监听器v-on
- 2025-01-15 模具设计之UG右键快捷菜单的修改方法
- 2025-01-15 6.9k Star!程序员必备!KeymouseGo告别重复劳动,效率提升10倍!
- 2025-01-15 手摸手教你 CentOS 入门必备基础知识(建议收藏)
- 2025-01-15 图形编辑器开发:快捷键的管理
- 2025-01-15 前端异常捕获与处理汇总,收藏篇
- 2025-01-15 因无法回答如何用Vue控制按钮级别权限,面试官说:你可以回家了
你 发表评论:
欢迎- 577℃几个Oracle空值处理函数 oracle处理null值的函数
- 573℃Oracle分析函数之Lag和Lead()使用
- 559℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 557℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 554℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 543℃【数据统计分析】详解Oracle分组函数之CUBE
- 531℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 527℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)