feat():learning后台管理前端页面初始化
This commit is contained in:
46
src/hooks/usePermissions.ts
Normal file
46
src/hooks/usePermissions.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
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
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user