import { createContext, useContext } from "react"; // RBAC Resource Names (must match backend definitions) export enum RbacResource { GuardrailsConfig = "GuardrailsConfig", GuardrailsProviders = "GuardrailsProviders", GuardrailRules = "GuardrailRules", UserProvisioning = "UserProvisioning", Cluster = "Cluster", Settings = "Settings", Users = "Users", Logs = "Logs", Observability = "Observability", VirtualKeys = "VirtualKeys", ModelProvider = "ModelProvider", Plugins = "Plugins", MCPGateway = "MCPGateway", AdaptiveRouter = "AdaptiveRouter", AuditLogs = "AuditLogs", Customers = "Customers", Teams = "Teams", RBAC = "RBAC", Governance = "Governance", RoutingRules = "RoutingRules", PIIRedactor = "PIIRedactor", PromptRepository = "PromptRepository", PromptDeploymentStrategy = "PromptDeploymentStrategy", AccessProfiles = "AccessProfiles", } // RBAC Operation Names (must match backend definitions) export enum RbacOperation { Read = "Read", View = "View", Create = "Create", Update = "Update", Delete = "Delete", Download = "Download", } interface RbacContextType { isAllowed: (resource: RbacResource, operation: RbacOperation) => boolean; permissions: Record>; isLoading: boolean; refetch: () => void; } const RbacContext = createContext(null); // Dummy provider that allows all permissions export function RbacProvider({ children }: { children: React.ReactNode }) { return ( true, // Always allow in OSS permissions: {}, isLoading: false, refetch: () => {}, }} > {children} ); } // Hook that always returns true (no restrictions in OSS) export function useRbac(_resource: RbacResource, _operation: RbacOperation): boolean { return true; } // Hook to access full RBAC context export function useRbacContext() { const context = useContext(RbacContext); if (!context) { // Return dummy values if used outside provider return { isAllowed: () => true, permissions: {}, isLoading: false, refetch: () => {}, }; } return context; }