UNPKG

@rsc-labs/nocto-plugin-system

Version:

Pluggable registry system for Nocto plugins

27 lines (26 loc) 947 B
import React from "react"; const NoctoRbacContext = React.createContext({ checkAccess: () => true, isReady: false }); export const NoctoRbacProvider = ({ children, user, isLoading, rbac }) => { const [permissions, setPermissions] = React.useState(); React.useEffect(() => { if (!user || isLoading) return; if (!rbac || !rbac.fetchPermissions || !user) return; rbac.fetchPermissions(user.id).then(setPermissions); }, [rbac, user]); const checkAccess = ({ pluginId }) => { if (rbac && rbac.evaluateAccess !== undefined) { return rbac.evaluateAccess(permissions?.get(pluginId)); } return true; }; const isReady = !!permissions || !rbac; return (React.createElement(NoctoRbacContext.Provider, { value: { checkAccess, isReady } }, children)); }; export const useNoctoRbac = () => { return React.useContext(NoctoRbacContext); };