@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
JavaScript
;
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