kontenhumas-fe/components/access-guard.tsx

32 lines
768 B
TypeScript

import { usePermission } from "./context/permission-context";
export function AccessGuard({
module,
action,
children,
fallback = null,
}: {
module?: string;
action?: string;
children: React.ReactNode;
fallback?: React.ReactNode;
}) {
const { canModule, canAction, can, loading } = usePermission();
if (loading) return null;
// ❗ WAJIB ADA RULE
if (!module && !action) {
if (process.env.NODE_ENV === "development") {
console.warn("AccessGuard requires module and/or action");
}
return fallback;
}
if (module && action && !can(module, action)) return fallback;
if (module && !action && !canModule(module)) return fallback;
if (!module && action && !canAction(action)) return fallback;
return <>{children}</>;
}