import { PermissionDefinition } from './permission-definition-interface'; /** * * @param operation The GQL operation name which will be used to find associated Permissions for * @param permissionDefinition An object of type PermissionDefinition * @returns An array of permission-keys (strings) which contain the given operation */ export const getPermissionsForOperation = ( operation: string, permissionDefinition: PermissionDefinition, ): string[] => { return permissionDefinition.permissions .filter((permission) => permission.gqlOperations?.includes(operation)) .map((permission) => permission.key); }; /** * The function reads and returns all mapped operations in the permission definition object except which are marked as IGNORE. * @param permissionDefinition An object of type PermissionDefinition */ export const getMappedOperations = ( permissionDefinition: PermissionDefinition, ): string[] => { const otherOperations = permissionDefinition.permissions.map( (permission) => permission.gqlOperations, ); const anonymousOperations = permissionDefinition.gqlOptions?.anonymousGqlOperations || new Array(); return [ ...new Set( Array().concat( ...otherOperations.filter(Array.isArray), anonymousOperations, ), ), ]; }; /** * The function reads and returns operations in the permission definition object which are marked as IGNORE. * @param permissionDefinition An object of type PermissionDefinition */ export const getIgnoredOperations = ( permissionDefinition: PermissionDefinition, ): string[] | undefined => { return permissionDefinition.gqlOptions?.ignoredGqlOperations; }; /** * Returns all permission keys. * @param permissionDefinition An object of type PermissionDefinition */ export const getPermissionsFromDefinition = ( permissionDefinition: PermissionDefinition, ): string[] => { return permissionDefinition.permissions.map((permission) => permission.key); };