Olympus/frontend/athena/components/common/Can.tsx
2026-07-02 23:05:59 +02:00

30 lines
683 B
TypeScript

"use client";
import type { ReactNode } from "react";
import { hasAllPermissions, hasAnyPermission, hasPermission } from "@/lib/permissions";
import type { CurrentUser, PermissionName } from "@/types/rbac";
type Props = {
user: CurrentUser | null;
permission?: PermissionName;
any?: PermissionName[];
all?: PermissionName[];
children: ReactNode;
};
export default function Can({ user, permission, any, all, children }: Props) {
if (permission && !hasPermission(user, permission)) {
return null;
}
if (any && !hasAnyPermission(user, any)) {
return null;
}
if (all && !hasAllPermissions(user, all)) {
return null;
}
return <>{children}</>;
}