67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import { ADMIN_PERMISSION, ADMIN_ROLE_KEY } from '@/constants/admin-constants';
|
|
import useUserStore from '@/store/modules/user';
|
|
|
|
/**
|
|
* 是否系统管理员
|
|
* @returns true | false
|
|
*/
|
|
export function isSystemAdmin(): boolean {
|
|
const userPermissions = useUserStore().permissions;
|
|
if (userPermissions.includes(ADMIN_PERMISSION)) return true;
|
|
const userRoles = useUserStore().roles;
|
|
if (userRoles.includes(ADMIN_ROLE_KEY)) return true;
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 只需含有其中权限
|
|
* @param role 权限字符数组
|
|
* @returns true | false
|
|
*/
|
|
export function hasPermissions(permissions: string[]): boolean {
|
|
if (!permissions || permissions.length === 0) return false;
|
|
const userPermissions = useUserStore().permissions;
|
|
if (!userPermissions || userPermissions.length === 0) return false;
|
|
if (userPermissions.includes(ADMIN_PERMISSION)) return true;
|
|
return permissions.some(p => userPermissions.some(up => up === p));
|
|
}
|
|
|
|
/**
|
|
* 同时匹配其中权限
|
|
* @param role 权限字符数组
|
|
* @returns true | false
|
|
*/
|
|
export function matchPermissions(permissions: string[]): boolean {
|
|
if (!permissions || permissions.length === 0) return false;
|
|
const userPermissions = useUserStore().permissions;
|
|
if (!userPermissions || userPermissions.length === 0) return false;
|
|
if (userPermissions.includes(ADMIN_PERMISSION)) return true;
|
|
return permissions.every(p => userPermissions.some(up => up === p));
|
|
}
|
|
|
|
/**
|
|
* 只需含有其中角色
|
|
* @param role 角色字符数组
|
|
* @returns true | false
|
|
*/
|
|
export function hasRoles(roles: string[]): boolean {
|
|
if (!roles || roles.length === 0) return false;
|
|
const userRoles = useUserStore().roles;
|
|
if (!userRoles || userRoles.length === 0) return false;
|
|
if (userRoles.includes(ADMIN_ROLE_KEY)) return true;
|
|
return roles.some(r => userRoles.some(ur => ur === r));
|
|
}
|
|
|
|
/**
|
|
* 同时匹配其中角色
|
|
* @param role 角色字符数组
|
|
* @returns true | false
|
|
*/
|
|
export function matchRoles(roles: string[]): boolean {
|
|
if (!roles || roles.length === 0) return false;
|
|
const userRoles = useUserStore().roles;
|
|
if (!userRoles || userRoles.length === 0) return false;
|
|
if (userRoles.includes(ADMIN_ROLE_KEY)) return true;
|
|
return roles.every(r => userRoles.some(ur => ur === r));
|
|
}
|