Files
goalfylearning-admin-web/src/hooks/usePermissions.ts

47 lines
1.4 KiB
TypeScript

import { useAtom } from 'jotai';
import { authStateAtom } from '../atoms/auth';
export const usePermissions = () => {
const [authState] = useAtom(authStateAtom);
const hasPermission = (permission: string): boolean => {
if (!authState.user?.permissions) {
console.log(`🔐 [usePermissions] 用户权限数据为空:`, authState.user);
return false;
}
const hasAccess = authState.user.permissions.includes(permission);
console.log(`🔐 [usePermissions] 检查权限 "${permission}": ${hasAccess}, 用户权限:`, authState.user.permissions);
return hasAccess;
};
const hasAnyPermission = (permissions: string[]): boolean => {
return permissions.some(permission => hasPermission(permission));
};
const hasAllPermissions = (permissions: string[]): boolean => {
return permissions.every(permission => hasPermission(permission));
};
const hasRole = (roleName: string): boolean => {
if (!authState.user?.roles) return false;
return authState.user.roles.includes(roleName);
};
const hasAnyRole = (roleNames: string[]): boolean => {
return roleNames.some(roleName => hasRole(roleName));
};
const hasAllRoles = (roleNames: string[]): boolean => {
return roleNames.every(roleName => hasRole(roleName));
};
return {
hasPermission,
hasAnyPermission,
hasAllPermissions,
hasRole,
hasAnyRole,
hasAllRoles
};
};