Add RequireAccess component for realm/role gating
cgen-7acaacfaa72b49948eb8871637992878
This commit is contained in:
parent
755ccc53ae
commit
912e6ff2a3
1 changed files with 21 additions and 0 deletions
21
client/components/RequireAccess.tsx
Normal file
21
client/components/RequireAccess.tsx
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import { Navigate, useLocation } from "react-router-dom";
|
||||
import { useAuth } from "@/contexts/AuthContext";
|
||||
|
||||
interface RequireAccessProps {
|
||||
allowedRealms?: Array<"game_developer" | "client" | "community_member" | "customer" | "staff">;
|
||||
allowedRoles?: string[];
|
||||
children: React.ReactElement;
|
||||
}
|
||||
|
||||
export default function RequireAccess({ allowedRealms, allowedRoles, children }: RequireAccessProps) {
|
||||
const { user, profile, roles } = useAuth();
|
||||
const location = useLocation();
|
||||
|
||||
const realmOk = !allowedRealms || allowedRealms.includes((profile as any)?.user_type);
|
||||
const rolesOk = !allowedRoles || (Array.isArray(roles) && roles.some(r => allowedRoles.includes(r.toLowerCase())));
|
||||
|
||||
if (!user) return <Navigate to={`/onboarding?next=${encodeURIComponent(location.pathname + location.search)}`} replace />;
|
||||
if (!realmOk || !rolesOk) return <Navigate to="/realms" replace />;
|
||||
|
||||
return children;
|
||||
}
|
||||
Loading…
Reference in a new issue