Files
lotteryAdmin/src/hooks/use-admin-permission.ts
kang 7224d044ae
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
refactor(admin-permissions, reports): normalize admin account kind and improve currency fallback logic
Refactored the admin account kind resolution to utilize a normalization function for better consistency across the application. Updated the currency fallback logic in the reports console to prioritize enabled and bettable currencies, enhancing the accuracy of currency display.
2026-06-16 17:15:06 +08:00

47 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { normalizeAdminAccountKind } from "@/lib/admin-account-kind";
import {
adminHasAnyPermission,
adminHasAnyPermissionCode,
adminOperationalPermissionCodes,
} from "@/lib/admin-permissions";
import { useAdminProfile } from "@/stores/admin-session";
import type { AdminAccountKind, AdminProfile } from "@/types/api/admin-auth";
export function resolveAdminAccountKind(profile: AdminProfile | null | undefined): AdminAccountKind | null {
if (!profile) {
return null;
}
const normalized = normalizeAdminAccountKind(profile.account_kind);
if (normalized) {
return normalized;
}
if (profile.is_super_admin) {
return "super_admin";
}
if (profile.agent != null) {
return "agent_operator";
}
if (profile.site != null) {
return "site_admin";
}
return "platform_account";
}
/** 统一权限与会话身份读取legacy `prd.*` 与 action code 并存,新代码优先用 `hasAnyCode`。 */
export function useAdminPermission() {
const profile = useAdminProfile();
const legacyPermissions = profile?.permissions ?? [];
const operationalPermissions = adminOperationalPermissionCodes(profile);
return {
profile,
legacyPermissions,
operationalPermissions,
accountKind: resolveAdminAccountKind(profile),
isSuperAdmin: profile?.is_super_admin === true,
/** @deprecated 逐步改用 {@link hasAnyCode} */
hasAnyLegacy: (required: readonly string[]) => adminHasAnyPermission(legacyPermissions, required),
hasAnyCode: (required: readonly string[]) => adminHasAnyPermissionCode(operationalPermissions, required),
};
}