saleor-dashboard/src/components/RequirePermissions.tsx

36 lines
1,017 B
TypeScript
Raw Normal View History

import { useUserPermissions } from "@saleor/auth/hooks/useUserPermissions";
import { User_userPermissions } from "@saleor/fragments/types/User";
2019-10-08 14:19:14 +00:00
import { PermissionEnum } from "@saleor/types/globalTypes";
import React from "react";
2019-10-08 14:19:14 +00:00
export function hasPermissions(
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,
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;