@rsc-labs/nocto-plugin-system
Version:
Pluggable registry system for Nocto plugins
27 lines (26 loc) • 947 B
JavaScript
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);
};