UNPKG

@stolostron/multicluster-sdk

Version:

Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.

46 lines 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useFleetAccessReview = void 0; const react_1 = require("react"); const checkAccess_1 = require("../internal/checkAccess"); /** * Hook that provides information about user access to a given resource. * @param resourceAttributes resource attributes for access review * @param resourceAttributes.group the name of the group to check access for * @param resourceAttributes.resource the name of the resource to check access for * @param resourceAttributes.subresource the name of the subresource to check access for * @param resourceAttributes.verb the "action" to perform; one of 'create' | 'get' | 'list' | 'update' | 'patch' | 'delete' | 'deletecollection' | 'watch' | 'impersonate' * @param resourceAttributes.name the name * @param resourceAttributes.namespace the namespace * @param resourceAttributes.cluster the cluster name to find the resource in * * @returns Array with `isAllowed` and `loading` values. */ const useFleetAccessReview = ({ group = '', resource = '', subresource = '', verb = '', name = '', namespace = '', cluster = '', }) => { const [loading, setLoading] = (0, react_1.useState)(true); const [isAllowed, setAllowed] = (0, react_1.useState)(false); const skipCheck = !group && !resource; (0, react_1.useEffect)(() => { if (skipCheck) { setAllowed(false); setLoading(false); return; } (0, checkAccess_1.checkAccess)(group, resource, subresource, verb, name, namespace, cluster) .then((result) => { setAllowed(result.status?.allowed ?? false); setLoading(false); }) .catch((e) => { console.warn('SelfSubjectAccessReview failed', e); // Default to enabling the action if the access review fails so that we // don't incorrectly block users from actions they can perform. The server // still enforces access control. setAllowed(true); setLoading(false); }); }, [setLoading, setAllowed, group, resource, subresource, verb, name, namespace, cluster, skipCheck]); return [isAllowed, loading]; }; exports.useFleetAccessReview = useFleetAccessReview; //# sourceMappingURL=useFleetAccessReview.js.map