@forklaunch/implementation-iam-base 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__test__/schemaEquality.test.d.ts +1 -1
- package/lib/__test__/schemaEquality.test.js +135 -235
- package/lib/jest.config.d.ts +1 -1
- package/lib/jest.config.js +16 -16
- package/lib/schemas/index.d.ts +1 -1
- package/lib/schemas/organization.schema.d.ts +146 -357
- package/lib/schemas/organization.schema.js +1 -4
- package/lib/schemas/permission.schema.d.ts +34 -88
- package/lib/schemas/permission.schema.js +1 -4
- package/lib/schemas/role.schema.d.ts +48 -137
- package/lib/schemas/role.schema.js +1 -4
- package/lib/schemas/typebox/organization.schema.d.ts +103 -405
- package/lib/schemas/typebox/organization.schema.js +17 -27
- package/lib/schemas/typebox/permission.schema.d.ts +38 -122
- package/lib/schemas/typebox/permission.schema.js +17 -24
- package/lib/schemas/typebox/role.schema.d.ts +50 -190
- package/lib/schemas/typebox/role.schema.js +17 -24
- package/lib/schemas/typebox/user.schema.d.ts +94 -330
- package/lib/schemas/typebox/user.schema.js +32 -40
- package/lib/schemas/user.schema.d.ts +114 -260
- package/lib/schemas/user.schema.js +1 -4
- package/lib/schemas/zod/organization.schema.d.ts +211 -301
- package/lib/schemas/zod/organization.schema.js +17 -27
- package/lib/schemas/zod/permission.schema.d.ts +38 -54
- package/lib/schemas/zod/permission.schema.js +17 -24
- package/lib/schemas/zod/role.schema.d.ts +64 -94
- package/lib/schemas/zod/role.schema.js +17 -24
- package/lib/schemas/zod/user.schema.d.ts +138 -184
- package/lib/schemas/zod/user.schema.js +32 -40
- package/lib/services/index.d.ts +1 -1
- package/lib/services/organization.service.d.ts +33 -106
- package/lib/services/organization.service.js +32 -47
- package/lib/services/permission.service.d.ts +41 -117
- package/lib/services/permission.service.js +149 -193
- package/lib/services/role.service.d.ts +35 -104
- package/lib/services/role.service.js +54 -70
- package/lib/services/user.service.d.ts +37 -121
- package/lib/services/user.service.js +80 -121
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/vitest.config.d.ts +2 -2
- package/lib/vitest.config.js +4 -4
- package/package.json +5 -5
|
@@ -1,50 +1,35 @@
|
|
|
1
1
|
import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
|
|
2
2
|
export class BaseOrganizationService {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
async updateOrganization(organizationDto, em) {
|
|
38
|
-
const updatedOrganization =
|
|
39
|
-
this.#mapperss.UpdateOrganizationDtoMapper.deserializeDtoToEntity(
|
|
40
|
-
organizationDto
|
|
41
|
-
);
|
|
42
|
-
await (em ?? this.em).upsert(updatedOrganization);
|
|
43
|
-
return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(
|
|
44
|
-
updatedOrganization
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
async deleteOrganization(idDto, em) {
|
|
48
|
-
await (em ?? this.em).nativeDelete('Organization', idDto);
|
|
49
|
-
}
|
|
3
|
+
em;
|
|
4
|
+
openTelemetryCollector;
|
|
5
|
+
schemaValidator;
|
|
6
|
+
mapperss;
|
|
7
|
+
#mapperss;
|
|
8
|
+
constructor(em, openTelemetryCollector, schemaValidator, mapperss) {
|
|
9
|
+
this.em = em;
|
|
10
|
+
this.openTelemetryCollector = openTelemetryCollector;
|
|
11
|
+
this.schemaValidator = schemaValidator;
|
|
12
|
+
this.mapperss = mapperss;
|
|
13
|
+
this.#mapperss = transformIntoInternalDtoMapper(mapperss, schemaValidator);
|
|
14
|
+
}
|
|
15
|
+
async createOrganization(organizationDto, em) {
|
|
16
|
+
this.openTelemetryCollector.log('info', 'Creating organization');
|
|
17
|
+
const organization = this.#mapperss.CreateOrganizationDtoMapper.deserializeDtoToEntity(organizationDto);
|
|
18
|
+
await (em ?? this.em).transactional(async (innerEm) => {
|
|
19
|
+
await innerEm.persist(organization);
|
|
20
|
+
});
|
|
21
|
+
return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(organization);
|
|
22
|
+
}
|
|
23
|
+
async getOrganization(idDto, em) {
|
|
24
|
+
const organization = await (em ?? this.em).findOneOrFail('Organization', idDto);
|
|
25
|
+
return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(organization);
|
|
26
|
+
}
|
|
27
|
+
async updateOrganization(organizationDto, em) {
|
|
28
|
+
const updatedOrganization = this.#mapperss.UpdateOrganizationDtoMapper.deserializeDtoToEntity(organizationDto);
|
|
29
|
+
await (em ?? this.em).upsert(updatedOrganization);
|
|
30
|
+
return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(updatedOrganization);
|
|
31
|
+
}
|
|
32
|
+
async deleteOrganization(idDto, em) {
|
|
33
|
+
await (em ?? this.em).nativeDelete('Organization', idDto);
|
|
34
|
+
}
|
|
50
35
|
}
|
|
@@ -1,138 +1,62 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PermissionService,
|
|
3
|
-
RoleService
|
|
4
|
-
} from '@forklaunch/interfaces-iam/interfaces';
|
|
1
|
+
import { PermissionService, RoleService } from '@forklaunch/interfaces-iam/interfaces';
|
|
5
2
|
import { IdDto, IdsDto } from '@forklaunch/common';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
ResponseDtoMapperConstructor
|
|
9
|
-
} from '@forklaunch/core/mappers';
|
|
10
|
-
import {
|
|
11
|
-
MetricsDefinition,
|
|
12
|
-
OpenTelemetryCollector
|
|
13
|
-
} from '@forklaunch/core/http';
|
|
3
|
+
import { RequestDtoMapperConstructor, ResponseDtoMapperConstructor } from '@forklaunch/core/mappers';
|
|
4
|
+
import { MetricsDefinition, OpenTelemetryCollector } from '@forklaunch/core/http';
|
|
14
5
|
import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
|
|
15
|
-
import {
|
|
16
|
-
CreatePermissionDto,
|
|
17
|
-
PermissionDto,
|
|
18
|
-
RoleDto,
|
|
19
|
-
UpdatePermissionDto
|
|
20
|
-
} from '@forklaunch/interfaces-iam/types';
|
|
6
|
+
import { CreatePermissionDto, PermissionDto, RoleDto, UpdatePermissionDto } from '@forklaunch/interfaces-iam/types';
|
|
21
7
|
import { AnySchemaValidator } from '@forklaunch/validator';
|
|
22
8
|
import { EntityManager } from '@mikro-orm/core';
|
|
23
|
-
export declare class BasePermissionService<
|
|
24
|
-
SchemaValidator extends AnySchemaValidator,
|
|
25
|
-
Metrics extends MetricsDefinition = MetricsDefinition,
|
|
26
|
-
Dto extends {
|
|
9
|
+
export declare class BasePermissionService<SchemaValidator extends AnySchemaValidator, Metrics extends MetricsDefinition = MetricsDefinition, Dto extends {
|
|
27
10
|
PermissionDtoMapper: PermissionDto;
|
|
28
11
|
CreatePermissionDtoMapper: CreatePermissionDto;
|
|
29
12
|
UpdatePermissionDtoMapper: UpdatePermissionDto;
|
|
30
13
|
RoleDtoMapper: RoleDto;
|
|
31
|
-
|
|
14
|
+
} = {
|
|
32
15
|
PermissionDtoMapper: PermissionDto;
|
|
33
16
|
CreatePermissionDtoMapper: CreatePermissionDto;
|
|
34
17
|
UpdatePermissionDtoMapper: UpdatePermissionDto;
|
|
35
18
|
RoleDtoMapper: RoleDto;
|
|
36
|
-
|
|
37
|
-
Entities extends {
|
|
19
|
+
}, Entities extends {
|
|
38
20
|
PermissionDtoMapper: PermissionDto;
|
|
39
21
|
CreatePermissionDtoMapper: PermissionDto;
|
|
40
22
|
UpdatePermissionDtoMapper: PermissionDto;
|
|
41
23
|
RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
|
|
42
|
-
|
|
24
|
+
} = {
|
|
43
25
|
PermissionDtoMapper: PermissionDto;
|
|
44
26
|
CreatePermissionDtoMapper: PermissionDto;
|
|
45
27
|
UpdatePermissionDtoMapper: PermissionDto;
|
|
46
28
|
RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
>;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
>;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
em:
|
|
79
|
-
roleServiceFactory: () => RoleService,
|
|
80
|
-
openTelemetryCollector: OpenTelemetryCollector<Metrics>,
|
|
81
|
-
schemaValidator: SchemaValidator,
|
|
82
|
-
mapperss: {
|
|
83
|
-
PermissionDtoMapper: ResponseDtoMapperConstructor<
|
|
84
|
-
SchemaValidator,
|
|
85
|
-
Dto['PermissionDtoMapper'],
|
|
86
|
-
Entities['PermissionDtoMapper']
|
|
87
|
-
>;
|
|
88
|
-
CreatePermissionDtoMapper: RequestDtoMapperConstructor<
|
|
89
|
-
SchemaValidator,
|
|
90
|
-
Dto['CreatePermissionDtoMapper'],
|
|
91
|
-
Entities['CreatePermissionDtoMapper']
|
|
92
|
-
>;
|
|
93
|
-
UpdatePermissionDtoMapper: RequestDtoMapperConstructor<
|
|
94
|
-
SchemaValidator,
|
|
95
|
-
Dto['UpdatePermissionDtoMapper'],
|
|
96
|
-
Entities['UpdatePermissionDtoMapper']
|
|
97
|
-
>;
|
|
98
|
-
RoleDtoMapper: RequestDtoMapperConstructor<
|
|
99
|
-
SchemaValidator,
|
|
100
|
-
Dto['RoleDtoMapper'],
|
|
101
|
-
Entities['RoleDtoMapper']
|
|
102
|
-
>;
|
|
103
|
-
}
|
|
104
|
-
);
|
|
105
|
-
private updateRolesWithPermissions;
|
|
106
|
-
private removePermissionsFromRoles;
|
|
107
|
-
private getBatchRoles;
|
|
108
|
-
private createPermissionDto;
|
|
109
|
-
private extractCreatePermissionDtoToEntityData;
|
|
110
|
-
createPermission(
|
|
111
|
-
createPermissionDto: Dto['CreatePermissionDtoMapper'],
|
|
112
|
-
em?: EntityManager
|
|
113
|
-
): Promise<Dto['PermissionDtoMapper']>;
|
|
114
|
-
createBatchPermissions(
|
|
115
|
-
permissionDtos: Dto['CreatePermissionDtoMapper'][],
|
|
116
|
-
em?: EntityManager
|
|
117
|
-
): Promise<Dto['PermissionDtoMapper'][]>;
|
|
118
|
-
getPermission(
|
|
119
|
-
idDto: IdDto,
|
|
120
|
-
em?: EntityManager
|
|
121
|
-
): Promise<Dto['PermissionDtoMapper']>;
|
|
122
|
-
getBatchPermissions(
|
|
123
|
-
idsDto: IdsDto,
|
|
124
|
-
em?: EntityManager
|
|
125
|
-
): Promise<Dto['PermissionDtoMapper'][]>;
|
|
126
|
-
private updatePermissionDto;
|
|
127
|
-
updatePermission(
|
|
128
|
-
permissionDto: Dto['UpdatePermissionDtoMapper'],
|
|
129
|
-
em?: EntityManager
|
|
130
|
-
): Promise<Dto['PermissionDtoMapper']>;
|
|
131
|
-
updateBatchPermissions(
|
|
132
|
-
permissionDtos: Dto['UpdatePermissionDtoMapper'][],
|
|
133
|
-
em?: EntityManager
|
|
134
|
-
): Promise<Dto['PermissionDtoMapper'][]>;
|
|
135
|
-
deletePermission(idDto: IdDto, em?: EntityManager): Promise<void>;
|
|
136
|
-
deleteBatchPermissions(idsDto: IdsDto, em?: EntityManager): Promise<void>;
|
|
29
|
+
}> implements PermissionService {
|
|
30
|
+
#private;
|
|
31
|
+
em: EntityManager;
|
|
32
|
+
protected roleServiceFactory: () => RoleService;
|
|
33
|
+
protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
|
|
34
|
+
protected schemaValidator: SchemaValidator;
|
|
35
|
+
protected mapperss: {
|
|
36
|
+
PermissionDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['PermissionDtoMapper'], Entities['PermissionDtoMapper']>;
|
|
37
|
+
CreatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreatePermissionDtoMapper'], Entities['CreatePermissionDtoMapper']>;
|
|
38
|
+
UpdatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdatePermissionDtoMapper'], Entities['UpdatePermissionDtoMapper']>;
|
|
39
|
+
RoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
|
|
40
|
+
};
|
|
41
|
+
constructor(em: EntityManager, roleServiceFactory: () => RoleService, openTelemetryCollector: OpenTelemetryCollector<Metrics>, schemaValidator: SchemaValidator, mapperss: {
|
|
42
|
+
PermissionDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['PermissionDtoMapper'], Entities['PermissionDtoMapper']>;
|
|
43
|
+
CreatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreatePermissionDtoMapper'], Entities['CreatePermissionDtoMapper']>;
|
|
44
|
+
UpdatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdatePermissionDtoMapper'], Entities['UpdatePermissionDtoMapper']>;
|
|
45
|
+
RoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
|
|
46
|
+
});
|
|
47
|
+
private updateRolesWithPermissions;
|
|
48
|
+
private removePermissionsFromRoles;
|
|
49
|
+
private getBatchRoles;
|
|
50
|
+
private createPermissionDto;
|
|
51
|
+
private extractCreatePermissionDtoToEntityData;
|
|
52
|
+
createPermission(createPermissionDto: Dto['CreatePermissionDtoMapper'], em?: EntityManager): Promise<Dto['PermissionDtoMapper']>;
|
|
53
|
+
createBatchPermissions(permissionDtos: Dto['CreatePermissionDtoMapper'][], em?: EntityManager): Promise<Dto['PermissionDtoMapper'][]>;
|
|
54
|
+
getPermission(idDto: IdDto, em?: EntityManager): Promise<Dto['PermissionDtoMapper']>;
|
|
55
|
+
getBatchPermissions(idsDto: IdsDto, em?: EntityManager): Promise<Dto['PermissionDtoMapper'][]>;
|
|
56
|
+
private updatePermissionDto;
|
|
57
|
+
updatePermission(permissionDto: Dto['UpdatePermissionDtoMapper'], em?: EntityManager): Promise<Dto['PermissionDtoMapper']>;
|
|
58
|
+
updateBatchPermissions(permissionDtos: Dto['UpdatePermissionDtoMapper'][], em?: EntityManager): Promise<Dto['PermissionDtoMapper'][]>;
|
|
59
|
+
deletePermission(idDto: IdDto, em?: EntityManager): Promise<void>;
|
|
60
|
+
deleteBatchPermissions(idsDto: IdsDto, em?: EntityManager): Promise<void>;
|
|
137
61
|
}
|
|
138
|
-
//# sourceMappingURL=permission.service.d.ts.map
|
|
62
|
+
//# sourceMappingURL=permission.service.d.ts.map
|
|
@@ -1,203 +1,159 @@
|
|
|
1
1
|
import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
|
|
2
2
|
export class BasePermissionService {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.em = em;
|
|
17
|
-
this.roleServiceFactory = roleServiceFactory;
|
|
18
|
-
this.openTelemetryCollector = openTelemetryCollector;
|
|
19
|
-
this.schemaValidator = schemaValidator;
|
|
20
|
-
this.mapperss = mapperss;
|
|
21
|
-
this.#mapperss = transformIntoInternalDtoMapper(mapperss, schemaValidator);
|
|
22
|
-
}
|
|
23
|
-
// start: global helper functions
|
|
24
|
-
async updateRolesWithPermissions(roles, permissions) {
|
|
25
|
-
return await Promise.all(
|
|
26
|
-
roles.map(async (role) => {
|
|
27
|
-
permissions.forEach((permission) => role.permissions.add(permission));
|
|
28
|
-
return role;
|
|
29
|
-
})
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
async removePermissionsFromRoles(roles, permissions) {
|
|
33
|
-
return await Promise.all(
|
|
34
|
-
roles.map(async (role) => {
|
|
35
|
-
permissions.forEach((permission) =>
|
|
36
|
-
role.permissions.remove(permission)
|
|
37
|
-
);
|
|
38
|
-
return role;
|
|
39
|
-
})
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
async getBatchRoles(roleIds, em) {
|
|
43
|
-
return roleIds
|
|
44
|
-
? (await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
|
|
45
|
-
(role) => {
|
|
46
|
-
return (em ?? this.em).merge(
|
|
47
|
-
this.#mapperss.RoleDtoMapper.deserializeDtoToEntity(role)
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
)
|
|
51
|
-
: [];
|
|
52
|
-
}
|
|
53
|
-
// end: global helper functions
|
|
54
|
-
// start: createPermission helper functions
|
|
55
|
-
async createPermissionDto({ permission, addToRoles }) {
|
|
56
|
-
let roles = [];
|
|
57
|
-
if (addToRoles) {
|
|
58
|
-
roles = await this.updateRolesWithPermissions(addToRoles, [permission]);
|
|
3
|
+
em;
|
|
4
|
+
roleServiceFactory;
|
|
5
|
+
openTelemetryCollector;
|
|
6
|
+
schemaValidator;
|
|
7
|
+
mapperss;
|
|
8
|
+
#mapperss;
|
|
9
|
+
constructor(em, roleServiceFactory, openTelemetryCollector, schemaValidator, mapperss) {
|
|
10
|
+
this.em = em;
|
|
11
|
+
this.roleServiceFactory = roleServiceFactory;
|
|
12
|
+
this.openTelemetryCollector = openTelemetryCollector;
|
|
13
|
+
this.schemaValidator = schemaValidator;
|
|
14
|
+
this.mapperss = mapperss;
|
|
15
|
+
this.#mapperss = transformIntoInternalDtoMapper(mapperss, schemaValidator);
|
|
59
16
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
17
|
+
// start: global helper functions
|
|
18
|
+
async updateRolesWithPermissions(roles, permissions) {
|
|
19
|
+
return await Promise.all(roles.map(async (role) => {
|
|
20
|
+
permissions.forEach((permission) => role.permissions.add(permission));
|
|
21
|
+
return role;
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
async removePermissionsFromRoles(roles, permissions) {
|
|
25
|
+
return await Promise.all(roles.map(async (role) => {
|
|
26
|
+
permissions.forEach((permission) => role.permissions.remove(permission));
|
|
27
|
+
return role;
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
async getBatchRoles(roleIds, em) {
|
|
31
|
+
return roleIds
|
|
32
|
+
? (await this.roleServiceFactory().getBatchRoles(roleIds, em)).map((role) => {
|
|
33
|
+
return (em ?? this.em).merge(this.#mapperss.RoleDtoMapper.deserializeDtoToEntity(role));
|
|
34
|
+
})
|
|
35
|
+
: [];
|
|
36
|
+
}
|
|
37
|
+
// end: global helper functions
|
|
38
|
+
// start: createPermission helper functions
|
|
39
|
+
async createPermissionDto({ permission, addToRoles }) {
|
|
40
|
+
let roles = [];
|
|
41
|
+
if (addToRoles) {
|
|
42
|
+
roles = await this.updateRolesWithPermissions(addToRoles, [permission]);
|
|
43
|
+
}
|
|
44
|
+
return { permission, roles };
|
|
45
|
+
}
|
|
46
|
+
async extractCreatePermissionDtoToEntityData(permissionDto, em) {
|
|
47
|
+
return {
|
|
48
|
+
permission: (em ?? this.em).merge(this.#mapperss.CreatePermissionDtoMapper.deserializeDtoToEntity(permissionDto)),
|
|
49
|
+
addToRoles: permissionDto.addToRolesIds
|
|
50
|
+
? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
|
|
51
|
+
: []
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// end: createPermission helper functions
|
|
55
|
+
async createPermission(createPermissionDto, em) {
|
|
56
|
+
const { permission, roles } = await this.createPermissionDto(await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em));
|
|
57
|
+
await (em ?? this.em).transactional(async (innerEm) => {
|
|
58
|
+
await innerEm.persist([permission, ...roles]);
|
|
59
|
+
});
|
|
60
|
+
return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
61
|
+
}
|
|
62
|
+
async createBatchPermissions(permissionDtos, em) {
|
|
63
|
+
const rolesCache = {};
|
|
64
|
+
const permissions = [];
|
|
65
|
+
await (em ?? this.em).transactional(async (em) => {
|
|
66
|
+
permissionDtos.map(async (createPermissionDto) => {
|
|
67
|
+
const { permission, roles } = await this.createPermissionDto(await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em));
|
|
68
|
+
roles.forEach((role) => {
|
|
69
|
+
if (rolesCache[role.id] &&
|
|
70
|
+
role.permissions !== rolesCache[role.id].permissions) {
|
|
71
|
+
role.permissions.getItems().forEach((permission) => {
|
|
72
|
+
if (!rolesCache[role.id].permissions.contains(permission)) {
|
|
73
|
+
rolesCache[role.id].permissions.add(permission);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
rolesCache[role.id] = role;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
permissions.push(permission);
|
|
104
82
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
83
|
+
await (em ?? this.em).persist([
|
|
84
|
+
...permissions,
|
|
85
|
+
...Object.values(rolesCache)
|
|
86
|
+
]);
|
|
108
87
|
});
|
|
109
|
-
permissions.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
permissionDto
|
|
135
|
-
);
|
|
136
|
-
const addToRoles = permissionDto.addToRolesIds
|
|
137
|
-
? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
|
|
138
|
-
: [];
|
|
139
|
-
const removeFromRoles = permissionDto.removeFromRolesIds
|
|
140
|
-
? await this.getBatchRoles({ ids: permissionDto.removeFromRolesIds }, em)
|
|
141
|
-
: [];
|
|
142
|
-
let roles = [];
|
|
143
|
-
roles = roles.concat(
|
|
144
|
-
await this.updateRolesWithPermissions(addToRoles, [permission])
|
|
145
|
-
);
|
|
146
|
-
roles = roles.concat(
|
|
147
|
-
await this.removePermissionsFromRoles(removeFromRoles, [permission])
|
|
148
|
-
);
|
|
149
|
-
return {
|
|
150
|
-
permission,
|
|
151
|
-
roles
|
|
88
|
+
return permissions.map((permission) => this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission));
|
|
89
|
+
}
|
|
90
|
+
async getPermission(idDto, em) {
|
|
91
|
+
const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
|
|
92
|
+
return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
93
|
+
}
|
|
94
|
+
async getBatchPermissions(idsDto, em) {
|
|
95
|
+
return (await (em ?? this.em).find('Permission', idsDto)).map((permission) => this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission));
|
|
96
|
+
}
|
|
97
|
+
// start: updatePermission helper functions
|
|
98
|
+
updatePermissionDto = async (permissionDto, em) => {
|
|
99
|
+
const permission = this.#mapperss.UpdatePermissionDtoMapper.deserializeDtoToEntity(permissionDto);
|
|
100
|
+
const addToRoles = permissionDto.addToRolesIds
|
|
101
|
+
? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
|
|
102
|
+
: [];
|
|
103
|
+
const removeFromRoles = permissionDto.removeFromRolesIds
|
|
104
|
+
? await this.getBatchRoles({ ids: permissionDto.removeFromRolesIds }, em)
|
|
105
|
+
: [];
|
|
106
|
+
let roles = [];
|
|
107
|
+
roles = roles.concat(await this.updateRolesWithPermissions(addToRoles, [permission]));
|
|
108
|
+
roles = roles.concat(await this.removePermissionsFromRoles(removeFromRoles, [permission]));
|
|
109
|
+
return {
|
|
110
|
+
permission,
|
|
111
|
+
roles
|
|
112
|
+
};
|
|
152
113
|
};
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
114
|
+
// end: updatePermission helper functions
|
|
115
|
+
async updatePermission(permissionDto, em) {
|
|
116
|
+
const { permission, roles } = await this.updatePermissionDto(permissionDto);
|
|
117
|
+
await (em ?? this.em).upsertMany([permission, ...roles]);
|
|
118
|
+
if (!em) {
|
|
119
|
+
this.em.flush();
|
|
120
|
+
}
|
|
121
|
+
return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
160
122
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
123
|
+
async updateBatchPermissions(permissionDtos, em) {
|
|
124
|
+
const rolesCache = {};
|
|
125
|
+
const permissions = [];
|
|
126
|
+
await (em ?? this.em).transactional(async (em) => {
|
|
127
|
+
permissionDtos.map(async (updatePermissionDto) => {
|
|
128
|
+
const { permission, roles } = await this.updatePermissionDto(updatePermissionDto);
|
|
129
|
+
roles.forEach((role) => {
|
|
130
|
+
if (rolesCache[role.id] &&
|
|
131
|
+
role.permissions !== rolesCache[role.id].permissions) {
|
|
132
|
+
role.permissions.getItems().forEach((permission) => {
|
|
133
|
+
if (!rolesCache[role.id].permissions.contains(permission)) {
|
|
134
|
+
rolesCache[role.id].permissions.add(permission);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
rolesCache[role.id] = role;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
permissions.push(permission);
|
|
179
143
|
});
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
144
|
+
await (em ?? this.em).persist([
|
|
145
|
+
...permissions,
|
|
146
|
+
...Object.values(rolesCache)
|
|
147
|
+
]);
|
|
183
148
|
});
|
|
184
|
-
permissions.
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
async deletePermission(idDto, em) {
|
|
196
|
-
await (em ?? this.em).nativeDelete('Permission', idDto);
|
|
197
|
-
}
|
|
198
|
-
async deleteBatchPermissions(idsDto, em) {
|
|
199
|
-
await (em ?? this.em).nativeDelete('Permission', {
|
|
200
|
-
id: { $in: idsDto.ids }
|
|
201
|
-
});
|
|
202
|
-
}
|
|
149
|
+
return permissions.map((permission) => this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission));
|
|
150
|
+
}
|
|
151
|
+
async deletePermission(idDto, em) {
|
|
152
|
+
await (em ?? this.em).nativeDelete('Permission', idDto);
|
|
153
|
+
}
|
|
154
|
+
async deleteBatchPermissions(idsDto, em) {
|
|
155
|
+
await (em ?? this.em).nativeDelete('Permission', {
|
|
156
|
+
id: { $in: idsDto.ids }
|
|
157
|
+
});
|
|
158
|
+
}
|
|
203
159
|
}
|