2022-03-01 08:38:23 +00:00
|
|
|
import { useUserPermissions } from "@saleor/auth/hooks/useUserPermissions";
|
2020-07-07 10:14:12 +00:00
|
|
|
import { User_userPermissions } from "@saleor/fragments/types/User";
|
2019-10-08 14:19:14 +00:00
|
|
|
import { PermissionEnum } from "@saleor/types/globalTypes";
|
2020-05-14 09:30:32 +00:00
|
|
|
import React from "react";
|
2019-10-08 14:19:14 +00:00
|
|
|
|
|
|
|
export function hasPermissions(
|
2020-04-23 15:43:08 +00:00
|
|
|
userPermissions: User_userPermissions[],
|
2019-10-08 14:19:14 +00:00
|
|
|
requiredPermissions: PermissionEnum[]
|
|
|
|
): boolean {
|
|
|
|
return requiredPermissions.reduce(
|
|
|
|
(acc, perm) =>
|
|
|
|
acc && !!userPermissions.find(userPerm => userPerm.code === perm),
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface RequirePermissionsProps {
|
|
|
|
children: React.ReactNode | React.ReactNodeArray;
|
|
|
|
requiredPermissions: PermissionEnum[];
|
|
|
|
}
|
|
|
|
|
|
|
|
const RequirePermissions: React.FC<RequirePermissionsProps> = ({
|
|
|
|
children,
|
2022-03-01 08:38:23 +00:00
|
|
|
requiredPermissions
|
|
|
|
}) => {
|
|
|
|
const userPermissions = useUserPermissions();
|
|
|
|
|
|
|
|
return userPermissions &&
|
|
|
|
hasPermissions(userPermissions, requiredPermissions) ? (
|
|
|
|
<>{children}</>
|
|
|
|
) : null;
|
|
|
|
};
|
2019-10-08 14:19:14 +00:00
|
|
|
|
|
|
|
RequirePermissions.displayName = "RequirePermissions";
|
|
|
|
export default RequirePermissions;
|