47 lines
1.4 KiB
TypeScript
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
|
|
};
|
|
};
|