Files
FastapiAdmin/frontend/src/directives/permission/index.ts
T
zhangtao d588abb386 style: 移除多余空行并统一代码格式
修复代码中的多余空行问题,统一字符串引号使用双引号,调整对象和数组的格式,优化代码缩进和换行,提升代码可读性和一致性
2025-11-14 01:45:22 +08:00

74 lines
2.1 KiB
TypeScript

import type { Directive, DirectiveBinding } from "vue";
import { useUserStore } from "@/store";
import { ROLE_ROOT } from "@/constants";
/**
* 按钮权限
*/
export const hasPerm: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const requiredPerms = binding.value;
// 校验传入的权限值是否合法
if (!requiredPerms || (typeof requiredPerms !== "string" && !Array.isArray(requiredPerms))) {
throw new Error(
"需要提供权限标识!例如:v-has-perm=\"'sys:user:add'\" 或 v-has-perm=\"['sys:user:add', 'sys:user:edit']\""
);
}
const { roles } = useUserStore().basicInfo;
const userPrems = useUserStore().prems;
// 超级管理员拥有所有权限,如果是"*:*:*"权限标识,则不需要进行权限校验
if (
(roles && roles.map((role) => role.code).includes(ROLE_ROOT)) ||
requiredPerms.includes("*:*:*")
) {
return;
}
// 检查权限
const hasAuth = Array.isArray(requiredPerms)
? requiredPerms.some((perm) => userPrems.includes(perm))
: userPrems.includes(requiredPerms);
// 如果没有权限,移除该元素
if (!hasAuth && el.parentNode) {
el.parentNode.removeChild(el);
}
},
};
/**
* 角色权限指令
*/
export const hasRole: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const requiredRoles = binding.value;
// 校验传入的角色值是否合法
if (!requiredRoles || (typeof requiredRoles !== "string" && !Array.isArray(requiredRoles))) {
throw new Error(
"需要提供角色标识!例如:v-has-role=\"'ADMIN'\" 或 v-has-role=\"['ADMIN', 'TEST']\""
);
}
const { roles } = useUserStore().basicInfo;
// 检查是否有对应角色权限
const hasAuth = Array.isArray(requiredRoles)
? requiredRoles.some((role) =>
roles ? roles.map((role) => role.code).includes(role) : false
)
: roles
? roles.map((role) => role.code).includes(requiredRoles)
: false;
// 如果没有权限,移除元素
if (!hasAuth && el.parentNode) {
el.parentNode.removeChild(el);
}
},
};