1.后端 API 注解鉴权使用方式:@SaCheckPermission("system:user:add") 2.前端全局指令函数使用方式:v-permission="['system:user:add']" 3.前端权限判断函数使用方式:checkPermission(['system:user:add'])
33 lines
930 B
TypeScript
33 lines
930 B
TypeScript
import { useLoginStore } from '@/store';
|
||
|
||
/**
|
||
* 权限判断
|
||
*
|
||
* @param value 权限码列表
|
||
* @return true 有权限,false 没有权限
|
||
*/
|
||
export default function checkPermission(value: Array<string>) {
|
||
const loginStore = useLoginStore();
|
||
const { permissions, roles } = loginStore;
|
||
const superAdmin = 'admin';
|
||
const allPermission = '*';
|
||
|
||
if (Array.isArray(value) && value.length > 0) {
|
||
const permissionValues = value;
|
||
// 校验权限码
|
||
const hasPermission = permissions.some((permission: string) => {
|
||
return (
|
||
allPermission === permission || permissionValues.includes(permission)
|
||
);
|
||
});
|
||
// 检验角色编码
|
||
const hasRole = roles.some((role: string) => {
|
||
return superAdmin === role || permissionValues.includes(role);
|
||
});
|
||
return hasPermission || hasRole;
|
||
}
|
||
throw new Error(
|
||
`need roles! Like v-permission="['admin','system:user:add']"`
|
||
);
|
||
}
|