2022-03-09 08:56:55 +00:00
|
|
|
import {
|
|
|
|
PermissionFragment,
|
|
|
|
PermissionGroupDetailsFragment,
|
2022-06-21 09:36:55 +00:00
|
|
|
UserFragment,
|
2023-01-16 09:45:12 +00:00
|
|
|
} from "@dashboard/graphql";
|
2021-05-14 08:15:15 +00:00
|
|
|
import difference from "lodash/difference";
|
2020-04-23 15:43:08 +00:00
|
|
|
|
|
|
|
import { PermissionGroupDetailsPageFormData } from "./components/PermissionGroupDetailsPage";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Will return true if group has all permissions available in shop assigned.
|
|
|
|
*/
|
|
|
|
export const isGroupFullAccess = (
|
2022-03-09 08:56:55 +00:00
|
|
|
permissionGroup: PermissionGroupDetailsFragment,
|
2022-06-21 09:36:55 +00:00
|
|
|
shopPermissions: Array<Omit<PermissionFragment, "__typename">>,
|
2020-04-23 15:43:08 +00:00
|
|
|
) => {
|
|
|
|
const assignedCodes = extractPermissionCodes(permissionGroup);
|
|
|
|
|
|
|
|
if (assignedCodes.length !== shopPermissions?.length) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (const permission of shopPermissions) {
|
|
|
|
if (assignedCodes.indexOf(permission.code) === undefined) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return list of codes which are assigned to the permission group.
|
|
|
|
*/
|
|
|
|
export const extractPermissionCodes = (
|
2022-06-21 09:36:55 +00:00
|
|
|
permissionGroup: PermissionGroupDetailsFragment,
|
2020-04-23 15:43:08 +00:00
|
|
|
) =>
|
|
|
|
permissionGroup?.permissions
|
|
|
|
? permissionGroup.permissions.map(perm => perm.code)
|
|
|
|
: [];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return lists of permissions which have to be added and removed from group.
|
|
|
|
*/
|
|
|
|
export const permissionsDiff = (
|
2022-03-09 08:56:55 +00:00
|
|
|
permissionGroup: PermissionGroupDetailsFragment,
|
2022-06-21 09:36:55 +00:00
|
|
|
formData: PermissionGroupDetailsPageFormData,
|
2020-04-23 15:43:08 +00:00
|
|
|
) => {
|
|
|
|
const newPermissions = formData.permissions;
|
|
|
|
const oldPermissions = extractPermissionCodes(permissionGroup);
|
|
|
|
|
|
|
|
return {
|
|
|
|
addPermissions: difference(newPermissions, oldPermissions),
|
2022-06-21 09:36:55 +00:00
|
|
|
removePermissions: difference(oldPermissions, newPermissions),
|
2020-04-23 15:43:08 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return lists of users which have to be added and removed from group.
|
|
|
|
*/
|
|
|
|
export const usersDiff = (
|
2022-03-09 08:56:55 +00:00
|
|
|
permissionGroup: PermissionGroupDetailsFragment,
|
2022-06-21 09:36:55 +00:00
|
|
|
formData: PermissionGroupDetailsPageFormData,
|
2020-04-23 15:43:08 +00:00
|
|
|
) => {
|
|
|
|
const newUsers = formData.users.map(u => u.id);
|
|
|
|
const oldUsers = permissionGroup?.users.map(u => u.id);
|
|
|
|
|
|
|
|
return {
|
|
|
|
addUsers: difference(newUsers, oldUsers),
|
2022-06-21 09:36:55 +00:00
|
|
|
removeUsers: difference(oldUsers, newUsers),
|
2020-04-23 15:43:08 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Permissions are exceeded when group has permission which is not handled by user
|
|
|
|
*/
|
|
|
|
export const arePermissionsExceeded = (
|
2022-03-09 08:56:55 +00:00
|
|
|
permissionGroup: PermissionGroupDetailsFragment,
|
2022-06-21 09:36:55 +00:00
|
|
|
user: UserFragment,
|
2020-04-23 15:43:08 +00:00
|
|
|
) => {
|
|
|
|
const groupPermissions = extractPermissionCodes(permissionGroup);
|
|
|
|
const userPermissions = user.userPermissions.map(p => p.code);
|
|
|
|
return difference(groupPermissions, userPermissions).length > 0;
|
|
|
|
};
|