All files / src/features/Permissions/AccessControl useAccessControl.ts

100% Statements 9/9
100% Branches 7/7
100% Functions 3/3
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43                          498x         54678x       54678x 80081x     54676x     498x 6316x   6316x           6316x        
import RESOURCE_BASE from "@constants/permissions";
import { useAppSelector } from "@redux/hooks";
import { selectIsAllowed } from "@redux/slices/accessControl/accessControl";
import { TAccessControlOperations } from "@redux/slices/accessControl/types";
import { checkPortals } from "@utils/routing";
import { composePermission } from "./utils";
 
export type TUseAccessControl = {
  withPortal?: boolean;
  operation: TAccessControlOperations;
  resource: string;
};
 
const useAccessControl = ({
  resource,
  operation,
  withPortal = false,
}: TUseAccessControl) => {
  const formattedResource = withPortal
    ? getPermissionByPortal(resource)
    : resource;
 
  const isAllowed = useAppSelector((state) =>
    selectIsAllowed(state, { resource: formattedResource, operation }),
  );
 
  return isAllowed;
};
 
const getPermissionByPortal = (resource: string) => {
  const { isAcquirerPortal, isEnterprisePortal } = checkPortals();
 
  const PORTAL = isAcquirerPortal
    ? RESOURCE_BASE.ACQUIRER
    : isEnterprisePortal
    ? RESOURCE_BASE.ENTERPRISE
    : RESOURCE_BASE.MERCHANT;
 
  return composePermission(PORTAL, resource);
};
 
export default useAccessControl;