import { GetUserProjectResourceAclResponseDto } from '../models/dto'; import { GetAclResponseDto } from '../models/dto'; import { AclResourcePermissions } from '../interfaces'; export class AclUtil { public static extractAclIdsFromUserProjectResourceAclResponseDto( getUserProjectResourceAclResponseDto: GetUserProjectResourceAclResponseDto[]): string[] { const aclIds: Set = new Set(); for (const resourceAcls of getUserProjectResourceAclResponseDto) { for (const aclId of resourceAcls.acl_id) { aclIds.add(aclId); } } return Array.from(aclIds); } public static aclResponseArrayToMap(aclResponseDto: GetAclResponseDto[]): Map> { const result: Map> = new Map>(); for (const aclResponse of aclResponseDto) { const permissionsName: string[] = []; for (const permission of aclResponse.permissions) { permissionsName.push(permission.name); } result.set(aclResponse.id, new Set(permissionsName)); } return result; } public static matchAclToResourseId(userProjectResourceAclResponseDto: GetUserProjectResourceAclResponseDto[], getAclResponseDto: GetAclResponseDto[]): AclResourcePermissions { const aciMap: Map> = AclUtil.aclResponseArrayToMap(getAclResponseDto); const result: AclResourcePermissions = {}; for (const aclResponse of userProjectResourceAclResponseDto) { const permissionsArrayHolder: string[] = []; for (const aclId of aclResponse.acl_id) { if (!result[aclResponse.resource_id]) { result[aclResponse.resource_id] = []; } permissionsArrayHolder.push(...Array.from(aciMap.get(aclId))); } const permissionsSet: Set = new Set(permissionsArrayHolder); result[aclResponse.resource_id].push(...Array.from(permissionsSet)); } return result; } public static resourcePermissionsObjectToStringArray(resourcePermissions: AclResourcePermissions): string[] { const result: string[] = []; for (const key in resourcePermissions) { if (resourcePermissions.hasOwnProperty(key)) { result.push(key); result.push(JSON.stringify(resourcePermissions[key])); } } return result; } public static aclResourcePermissionsStringToAclResourcePermission(stringValue: string, resourceId: string): AclResourcePermissions { const result: AclResourcePermissions = {}; result[resourceId] = JSON.parse(stringValue); return result; } public static aclResourcePermissionsObjectToAclResourcePermission(stringObject: { [key: string]: string }, resourceIds: string[] = null): AclResourcePermissions { const result: AclResourcePermissions = {}; if (resourceIds) { return this.aclResourcePermissionsObjectToAclResourcePermissionByResourcesIds(stringObject, resourceIds); } for (const key in stringObject) { if (stringObject.hasOwnProperty(key)) { result[key] = JSON.parse(stringObject[key]); } } return result; } private static aclResourcePermissionsObjectToAclResourcePermissionByResourcesIds(stringObject: { [key: string]: string }, resourceIds: string[]): AclResourcePermissions { const result: AclResourcePermissions = {}; for (const resourceId of resourceIds) { if (stringObject.hasOwnProperty(resourceId)) { result[resourceId] = JSON.parse(stringObject[resourceId]); } } return result; } }