@forklaunch/implementation-iam-base 0.1.17 → 0.2.1
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/eject/services/organization.service.ts +75 -21
- package/lib/eject/services/permission.service.ts +169 -89
- package/lib/eject/services/role.service.ts +126 -42
- package/lib/eject/services/user.service.ts +128 -58
- package/lib/services/organization.service.d.ts +11 -6
- package/lib/services/organization.service.d.ts.map +1 -1
- package/lib/services/organization.service.js +56 -18
- package/lib/services/permission.service.d.ts +29 -18
- package/lib/services/permission.service.d.ts.map +1 -1
- package/lib/services/permission.service.js +125 -64
- package/lib/services/role.service.d.ts +10 -5
- package/lib/services/role.service.d.ts.map +1 -1
- package/lib/services/role.service.js +102 -36
- package/lib/services/user.service.d.ts +23 -27
- package/lib/services/user.service.d.ts.map +1 -1
- package/lib/services/user.service.js +102 -43
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1,50 +1,88 @@
|
|
|
1
|
+
import { evaluateTelemetryOptions } from '@forklaunch/core/http';
|
|
1
2
|
import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
|
|
2
3
|
export class BaseOrganizationService {
|
|
3
4
|
em;
|
|
4
5
|
openTelemetryCollector;
|
|
5
6
|
schemaValidator;
|
|
6
|
-
|
|
7
|
-
#
|
|
8
|
-
|
|
7
|
+
mappers;
|
|
8
|
+
#mappers;
|
|
9
|
+
evaluatedTelemetryOptions;
|
|
10
|
+
constructor(em, openTelemetryCollector, schemaValidator, mappers, options) {
|
|
9
11
|
this.em = em;
|
|
10
12
|
this.openTelemetryCollector = openTelemetryCollector;
|
|
11
13
|
this.schemaValidator = schemaValidator;
|
|
12
|
-
this.
|
|
13
|
-
this.#
|
|
14
|
+
this.mappers = mappers;
|
|
15
|
+
this.#mappers = transformIntoInternalDtoMapper(mappers, schemaValidator);
|
|
16
|
+
this.evaluatedTelemetryOptions = options?.telemetry
|
|
17
|
+
? evaluateTelemetryOptions(options.telemetry).enabled
|
|
18
|
+
: {
|
|
19
|
+
logging: false,
|
|
20
|
+
metrics: false,
|
|
21
|
+
tracing: false
|
|
22
|
+
};
|
|
14
23
|
}
|
|
15
24
|
async createOrganization(organizationDto, em) {
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
26
|
+
this.openTelemetryCollector.info(
|
|
27
|
+
'Creating organization',
|
|
19
28
|
organizationDto
|
|
20
29
|
);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
}
|
|
31
|
+
const organization =
|
|
32
|
+
await this.#mappers.CreateOrganizationDtoMapper.deserializeDtoToEntity(
|
|
33
|
+
organizationDto,
|
|
34
|
+
em ?? this.em
|
|
35
|
+
);
|
|
36
|
+
if (em) {
|
|
37
|
+
await em.persist(organization);
|
|
38
|
+
} else {
|
|
39
|
+
await this.em.persistAndFlush(organization);
|
|
40
|
+
}
|
|
41
|
+
return this.#mappers.OrganizationDtoMapper.serializeEntityToDto(
|
|
25
42
|
organization
|
|
26
43
|
);
|
|
27
44
|
}
|
|
28
45
|
async getOrganization(idDto, em) {
|
|
46
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
47
|
+
this.openTelemetryCollector.info('Getting organization', idDto);
|
|
48
|
+
}
|
|
29
49
|
const organization = await (em ?? this.em).findOneOrFail(
|
|
30
50
|
'Organization',
|
|
31
51
|
idDto
|
|
32
52
|
);
|
|
33
|
-
return this.#
|
|
53
|
+
return this.#mappers.OrganizationDtoMapper.serializeEntityToDto(
|
|
34
54
|
organization
|
|
35
55
|
);
|
|
36
56
|
}
|
|
37
57
|
async updateOrganization(organizationDto, em) {
|
|
38
|
-
|
|
39
|
-
this
|
|
58
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
59
|
+
this.openTelemetryCollector.info(
|
|
60
|
+
'Updating organization',
|
|
40
61
|
organizationDto
|
|
41
62
|
);
|
|
42
|
-
|
|
43
|
-
|
|
63
|
+
}
|
|
64
|
+
const updatedOrganization =
|
|
65
|
+
await this.#mappers.UpdateOrganizationDtoMapper.deserializeDtoToEntity(
|
|
66
|
+
organizationDto,
|
|
67
|
+
em ?? this.em
|
|
68
|
+
);
|
|
69
|
+
if (em) {
|
|
70
|
+
await em.persist(updatedOrganization);
|
|
71
|
+
} else {
|
|
72
|
+
await this.em.persistAndFlush(updatedOrganization);
|
|
73
|
+
}
|
|
74
|
+
return this.#mappers.OrganizationDtoMapper.serializeEntityToDto(
|
|
44
75
|
updatedOrganization
|
|
45
76
|
);
|
|
46
77
|
}
|
|
47
78
|
async deleteOrganization(idDto, em) {
|
|
48
|
-
|
|
79
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
80
|
+
this.openTelemetryCollector.info('Deleting organization', idDto);
|
|
81
|
+
}
|
|
82
|
+
if (em) {
|
|
83
|
+
await em.nativeDelete('Organization', idDto);
|
|
84
|
+
} else {
|
|
85
|
+
await this.em.nativeDelete('Organization', idDto);
|
|
86
|
+
}
|
|
49
87
|
}
|
|
50
88
|
}
|
|
@@ -3,20 +3,21 @@ import {
|
|
|
3
3
|
RoleService
|
|
4
4
|
} from '@forklaunch/interfaces-iam/interfaces';
|
|
5
5
|
import { IdDto, IdsDto } from '@forklaunch/common';
|
|
6
|
+
import {
|
|
7
|
+
MetricsDefinition,
|
|
8
|
+
OpenTelemetryCollector,
|
|
9
|
+
TelemetryOptions
|
|
10
|
+
} from '@forklaunch/core/http';
|
|
6
11
|
import {
|
|
7
12
|
RequestDtoMapperConstructor,
|
|
8
13
|
ResponseDtoMapperConstructor
|
|
9
14
|
} from '@forklaunch/core/mappers';
|
|
10
|
-
import {
|
|
11
|
-
MetricsDefinition,
|
|
12
|
-
OpenTelemetryCollector
|
|
13
|
-
} from '@forklaunch/core/http';
|
|
14
15
|
import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
|
|
15
16
|
import {
|
|
16
17
|
CreatePermissionDto,
|
|
17
18
|
PermissionDto,
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
UpdatePermissionDto,
|
|
20
|
+
UpdateRoleDto
|
|
20
21
|
} from '@forklaunch/interfaces-iam/types';
|
|
21
22
|
import { AnySchemaValidator } from '@forklaunch/validator';
|
|
22
23
|
import { EntityManager } from '@mikro-orm/core';
|
|
@@ -27,23 +28,29 @@ export declare class BasePermissionService<
|
|
|
27
28
|
PermissionDtoMapper: PermissionDto;
|
|
28
29
|
CreatePermissionDtoMapper: CreatePermissionDto;
|
|
29
30
|
UpdatePermissionDtoMapper: UpdatePermissionDto;
|
|
30
|
-
|
|
31
|
+
RoleEntityMapper: UpdateRoleDto;
|
|
31
32
|
} = {
|
|
32
33
|
PermissionDtoMapper: PermissionDto;
|
|
33
34
|
CreatePermissionDtoMapper: CreatePermissionDto;
|
|
34
35
|
UpdatePermissionDtoMapper: UpdatePermissionDto;
|
|
35
|
-
|
|
36
|
+
RoleEntityMapper: UpdateRoleDto;
|
|
36
37
|
},
|
|
37
38
|
Entities extends {
|
|
38
39
|
PermissionDtoMapper: PermissionDto;
|
|
39
40
|
CreatePermissionDtoMapper: PermissionDto;
|
|
40
41
|
UpdatePermissionDtoMapper: PermissionDto;
|
|
41
|
-
|
|
42
|
+
RoleEntityMapper: MapNestedDtoArraysToCollections<
|
|
43
|
+
UpdateRoleDto,
|
|
44
|
+
'permissions'
|
|
45
|
+
>;
|
|
42
46
|
} = {
|
|
43
47
|
PermissionDtoMapper: PermissionDto;
|
|
44
48
|
CreatePermissionDtoMapper: PermissionDto;
|
|
45
49
|
UpdatePermissionDtoMapper: PermissionDto;
|
|
46
|
-
|
|
50
|
+
RoleEntityMapper: MapNestedDtoArraysToCollections<
|
|
51
|
+
UpdateRoleDto,
|
|
52
|
+
'permissions'
|
|
53
|
+
>;
|
|
47
54
|
}
|
|
48
55
|
> implements PermissionService
|
|
49
56
|
{
|
|
@@ -52,7 +59,7 @@ export declare class BasePermissionService<
|
|
|
52
59
|
protected roleServiceFactory: () => RoleService;
|
|
53
60
|
protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
|
|
54
61
|
protected schemaValidator: SchemaValidator;
|
|
55
|
-
protected
|
|
62
|
+
protected mappers: {
|
|
56
63
|
PermissionDtoMapper: ResponseDtoMapperConstructor<
|
|
57
64
|
SchemaValidator,
|
|
58
65
|
Dto['PermissionDtoMapper'],
|
|
@@ -68,18 +75,19 @@ export declare class BasePermissionService<
|
|
|
68
75
|
Dto['UpdatePermissionDtoMapper'],
|
|
69
76
|
Entities['UpdatePermissionDtoMapper']
|
|
70
77
|
>;
|
|
71
|
-
|
|
78
|
+
RoleEntityMapper: RequestDtoMapperConstructor<
|
|
72
79
|
SchemaValidator,
|
|
73
|
-
Dto['
|
|
74
|
-
Entities['
|
|
80
|
+
Dto['RoleEntityMapper'],
|
|
81
|
+
Entities['RoleEntityMapper']
|
|
75
82
|
>;
|
|
76
83
|
};
|
|
84
|
+
private evaluatedTelemetryOptions;
|
|
77
85
|
constructor(
|
|
78
86
|
em: EntityManager,
|
|
79
87
|
roleServiceFactory: () => RoleService,
|
|
80
88
|
openTelemetryCollector: OpenTelemetryCollector<Metrics>,
|
|
81
89
|
schemaValidator: SchemaValidator,
|
|
82
|
-
|
|
90
|
+
mappers: {
|
|
83
91
|
PermissionDtoMapper: ResponseDtoMapperConstructor<
|
|
84
92
|
SchemaValidator,
|
|
85
93
|
Dto['PermissionDtoMapper'],
|
|
@@ -95,11 +103,14 @@ export declare class BasePermissionService<
|
|
|
95
103
|
Dto['UpdatePermissionDtoMapper'],
|
|
96
104
|
Entities['UpdatePermissionDtoMapper']
|
|
97
105
|
>;
|
|
98
|
-
|
|
106
|
+
RoleEntityMapper: RequestDtoMapperConstructor<
|
|
99
107
|
SchemaValidator,
|
|
100
|
-
Dto['
|
|
101
|
-
Entities['
|
|
108
|
+
Dto['RoleEntityMapper'],
|
|
109
|
+
Entities['RoleEntityMapper']
|
|
102
110
|
>;
|
|
111
|
+
},
|
|
112
|
+
options?: {
|
|
113
|
+
telemetry?: TelemetryOptions;
|
|
103
114
|
}
|
|
104
115
|
);
|
|
105
116
|
private updateRolesWithPermissions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAEL,
|
|
1
|
+
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,38 @@
|
|
|
1
|
+
import { evaluateTelemetryOptions } from '@forklaunch/core/http';
|
|
1
2
|
import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
|
|
2
3
|
export class BasePermissionService {
|
|
3
4
|
em;
|
|
4
5
|
roleServiceFactory;
|
|
5
6
|
openTelemetryCollector;
|
|
6
7
|
schemaValidator;
|
|
7
|
-
|
|
8
|
-
#
|
|
8
|
+
mappers;
|
|
9
|
+
#mappers;
|
|
10
|
+
evaluatedTelemetryOptions;
|
|
9
11
|
constructor(
|
|
10
12
|
em,
|
|
11
13
|
roleServiceFactory,
|
|
12
14
|
openTelemetryCollector,
|
|
13
15
|
schemaValidator,
|
|
14
|
-
|
|
16
|
+
mappers,
|
|
17
|
+
options
|
|
15
18
|
) {
|
|
16
19
|
this.em = em;
|
|
17
20
|
this.roleServiceFactory = roleServiceFactory;
|
|
18
21
|
this.openTelemetryCollector = openTelemetryCollector;
|
|
19
22
|
this.schemaValidator = schemaValidator;
|
|
20
|
-
this.
|
|
21
|
-
this.#
|
|
23
|
+
this.mappers = mappers;
|
|
24
|
+
this.#mappers = transformIntoInternalDtoMapper(mappers, schemaValidator);
|
|
25
|
+
this.evaluatedTelemetryOptions = options?.telemetry
|
|
26
|
+
? evaluateTelemetryOptions(options.telemetry).enabled
|
|
27
|
+
: {
|
|
28
|
+
logging: false,
|
|
29
|
+
metrics: false,
|
|
30
|
+
tracing: false
|
|
31
|
+
};
|
|
22
32
|
}
|
|
23
33
|
// start: global helper functions
|
|
24
34
|
async updateRolesWithPermissions(roles, permissions) {
|
|
25
|
-
return
|
|
35
|
+
return Promise.all(
|
|
26
36
|
roles.map(async (role) => {
|
|
27
37
|
permissions.forEach((permission) => role.permissions.add(permission));
|
|
28
38
|
return role;
|
|
@@ -30,7 +40,7 @@ export class BasePermissionService {
|
|
|
30
40
|
);
|
|
31
41
|
}
|
|
32
42
|
async removePermissionsFromRoles(roles, permissions) {
|
|
33
|
-
return
|
|
43
|
+
return Promise.all(
|
|
34
44
|
roles.map(async (role) => {
|
|
35
45
|
permissions.forEach((permission) =>
|
|
36
46
|
role.permissions.remove(permission)
|
|
@@ -41,12 +51,17 @@ export class BasePermissionService {
|
|
|
41
51
|
}
|
|
42
52
|
async getBatchRoles(roleIds, em) {
|
|
43
53
|
return roleIds
|
|
44
|
-
?
|
|
45
|
-
(
|
|
46
|
-
|
|
47
|
-
this
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
? await Promise.all(
|
|
55
|
+
(await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
|
|
56
|
+
async (role) => {
|
|
57
|
+
return (em ?? this.em).merge(
|
|
58
|
+
await this.#mappers.RoleEntityMapper.deserializeDtoToEntity(
|
|
59
|
+
role,
|
|
60
|
+
em ?? this.em
|
|
61
|
+
)
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
)
|
|
50
65
|
)
|
|
51
66
|
: [];
|
|
52
67
|
}
|
|
@@ -62,8 +77,9 @@ export class BasePermissionService {
|
|
|
62
77
|
async extractCreatePermissionDtoToEntityData(permissionDto, em) {
|
|
63
78
|
return {
|
|
64
79
|
permission: (em ?? this.em).merge(
|
|
65
|
-
this.#
|
|
66
|
-
permissionDto
|
|
80
|
+
await this.#mappers.CreatePermissionDtoMapper.deserializeDtoToEntity(
|
|
81
|
+
permissionDto,
|
|
82
|
+
em ?? this.em
|
|
67
83
|
)
|
|
68
84
|
),
|
|
69
85
|
addToRoles: permissionDto.addToRolesIds
|
|
@@ -73,65 +89,89 @@ export class BasePermissionService {
|
|
|
73
89
|
}
|
|
74
90
|
// end: createPermission helper functions
|
|
75
91
|
async createPermission(createPermissionDto, em) {
|
|
92
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
93
|
+
this.openTelemetryCollector.info(
|
|
94
|
+
'Creating permission',
|
|
95
|
+
createPermissionDto
|
|
96
|
+
);
|
|
97
|
+
}
|
|
76
98
|
const { permission, roles } = await this.createPermissionDto(
|
|
77
99
|
await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em)
|
|
78
100
|
);
|
|
79
|
-
|
|
80
|
-
await
|
|
81
|
-
}
|
|
82
|
-
|
|
101
|
+
if (em) {
|
|
102
|
+
await em.persist([permission, ...roles]);
|
|
103
|
+
} else {
|
|
104
|
+
await this.em.persistAndFlush([permission, ...roles]);
|
|
105
|
+
}
|
|
106
|
+
return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
83
107
|
}
|
|
84
108
|
async createBatchPermissions(permissionDtos, em) {
|
|
109
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
110
|
+
this.openTelemetryCollector.info(
|
|
111
|
+
'Creating batch permissions',
|
|
112
|
+
permissionDtos
|
|
113
|
+
);
|
|
114
|
+
}
|
|
85
115
|
const rolesCache = {};
|
|
86
116
|
const permissions = [];
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
) {
|
|
100
|
-
role.permissions.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
permissions.push(permission);
|
|
117
|
+
permissionDtos.map(async (createPermissionDto) => {
|
|
118
|
+
const { permission, roles } = await this.createPermissionDto(
|
|
119
|
+
await this.extractCreatePermissionDtoToEntityData(
|
|
120
|
+
createPermissionDto,
|
|
121
|
+
em
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
roles.forEach((role) => {
|
|
125
|
+
if (
|
|
126
|
+
rolesCache[role.id] &&
|
|
127
|
+
role.permissions !== rolesCache[role.id].permissions
|
|
128
|
+
) {
|
|
129
|
+
role.permissions.getItems().forEach((permission) => {
|
|
130
|
+
if (!rolesCache[role.id].permissions.contains(permission)) {
|
|
131
|
+
rolesCache[role.id].permissions.add(permission);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
} else {
|
|
135
|
+
rolesCache[role.id] = role;
|
|
136
|
+
}
|
|
110
137
|
});
|
|
111
|
-
|
|
112
|
-
...permissions,
|
|
113
|
-
...Object.values(rolesCache)
|
|
114
|
-
]);
|
|
138
|
+
permissions.push(permission);
|
|
115
139
|
});
|
|
116
|
-
|
|
117
|
-
|
|
140
|
+
const entities = [...permissions, ...Object.values(rolesCache)];
|
|
141
|
+
if (em) {
|
|
142
|
+
await em.persist(entities);
|
|
143
|
+
} else {
|
|
144
|
+
await this.em.persistAndFlush(entities);
|
|
145
|
+
}
|
|
146
|
+
return Promise.all(
|
|
147
|
+
permissions.map(async (permission) =>
|
|
148
|
+
this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
|
|
149
|
+
)
|
|
118
150
|
);
|
|
119
151
|
}
|
|
120
152
|
async getPermission(idDto, em) {
|
|
153
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
154
|
+
this.openTelemetryCollector.info('Getting permission', idDto);
|
|
155
|
+
}
|
|
121
156
|
const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
|
|
122
|
-
return this.#
|
|
157
|
+
return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
123
158
|
}
|
|
124
159
|
async getBatchPermissions(idsDto, em) {
|
|
125
|
-
|
|
126
|
-
(
|
|
127
|
-
|
|
160
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
161
|
+
this.openTelemetryCollector.info('Getting batch permissions', idsDto);
|
|
162
|
+
}
|
|
163
|
+
return Promise.all(
|
|
164
|
+
(await (em ?? this.em).find('Permission', idsDto)).map((permission) =>
|
|
165
|
+
this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
|
|
166
|
+
)
|
|
128
167
|
);
|
|
129
168
|
}
|
|
130
169
|
// start: updatePermission helper functions
|
|
131
170
|
updatePermissionDto = async (permissionDto, em) => {
|
|
132
171
|
const permission =
|
|
133
|
-
this.#
|
|
134
|
-
permissionDto
|
|
172
|
+
await this.#mappers.UpdatePermissionDtoMapper.deserializeDtoToEntity(
|
|
173
|
+
permissionDto,
|
|
174
|
+
em ?? this.em
|
|
135
175
|
);
|
|
136
176
|
const addToRoles = permissionDto.addToRolesIds
|
|
137
177
|
? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
|
|
@@ -153,14 +193,25 @@ export class BasePermissionService {
|
|
|
153
193
|
};
|
|
154
194
|
// end: updatePermission helper functions
|
|
155
195
|
async updatePermission(permissionDto, em) {
|
|
196
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
197
|
+
this.openTelemetryCollector.info('Updating permission', permissionDto);
|
|
198
|
+
}
|
|
156
199
|
const { permission, roles } = await this.updatePermissionDto(permissionDto);
|
|
157
|
-
await (em ?? this.em).upsertMany([permission, ...roles]);
|
|
158
|
-
if (
|
|
159
|
-
|
|
200
|
+
const entities = await (em ?? this.em).upsertMany([permission, ...roles]);
|
|
201
|
+
if (em) {
|
|
202
|
+
await em.persist(entities);
|
|
203
|
+
} else {
|
|
204
|
+
await this.em.persistAndFlush(entities);
|
|
160
205
|
}
|
|
161
|
-
return this.#
|
|
206
|
+
return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
162
207
|
}
|
|
163
208
|
async updateBatchPermissions(permissionDtos, em) {
|
|
209
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
210
|
+
this.openTelemetryCollector.info(
|
|
211
|
+
'Updating batch permissions',
|
|
212
|
+
permissionDtos
|
|
213
|
+
);
|
|
214
|
+
}
|
|
164
215
|
const rolesCache = {};
|
|
165
216
|
const permissions = [];
|
|
166
217
|
await (em ?? this.em).transactional(async (em) => {
|
|
@@ -183,19 +234,29 @@ export class BasePermissionService {
|
|
|
183
234
|
});
|
|
184
235
|
permissions.push(permission);
|
|
185
236
|
});
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
237
|
+
const entities = [...permissions, ...Object.values(rolesCache)];
|
|
238
|
+
if (em) {
|
|
239
|
+
await em.persist(entities);
|
|
240
|
+
} else {
|
|
241
|
+
await this.em.persistAndFlush(entities);
|
|
242
|
+
}
|
|
190
243
|
});
|
|
191
|
-
return
|
|
192
|
-
|
|
244
|
+
return Promise.all(
|
|
245
|
+
permissions.map((permission) =>
|
|
246
|
+
this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
|
|
247
|
+
)
|
|
193
248
|
);
|
|
194
249
|
}
|
|
195
250
|
async deletePermission(idDto, em) {
|
|
251
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
252
|
+
this.openTelemetryCollector.info('Deleting permission', idDto);
|
|
253
|
+
}
|
|
196
254
|
await (em ?? this.em).nativeDelete('Permission', idDto);
|
|
197
255
|
}
|
|
198
256
|
async deleteBatchPermissions(idsDto, em) {
|
|
257
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
258
|
+
this.openTelemetryCollector.info('Deleting batch permissions', idsDto);
|
|
259
|
+
}
|
|
199
260
|
await (em ?? this.em).nativeDelete('Permission', {
|
|
200
261
|
id: { $in: idsDto.ids }
|
|
201
262
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MetricsDefinition,
|
|
3
|
-
OpenTelemetryCollector
|
|
3
|
+
OpenTelemetryCollector,
|
|
4
|
+
TelemetryOptions
|
|
4
5
|
} from '@forklaunch/core/http';
|
|
5
6
|
import { RoleService } from '@forklaunch/interfaces-iam/interfaces';
|
|
6
7
|
import { EntityManager } from '@mikro-orm/core';
|
|
@@ -55,7 +56,7 @@ export declare class BaseRoleService<
|
|
|
55
56
|
em: EntityManager;
|
|
56
57
|
protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
|
|
57
58
|
protected schemaValidator: SchemaValidator;
|
|
58
|
-
protected
|
|
59
|
+
protected mappers: {
|
|
59
60
|
RoleDtoMapper: ResponseDtoMapperConstructor<
|
|
60
61
|
SchemaValidator,
|
|
61
62
|
Dto['RoleDtoMapper'],
|
|
@@ -72,11 +73,12 @@ export declare class BaseRoleService<
|
|
|
72
73
|
Entities['UpdateRoleDtoMapper']
|
|
73
74
|
>;
|
|
74
75
|
};
|
|
76
|
+
private evaluatedTelemetryOptions;
|
|
75
77
|
constructor(
|
|
76
78
|
em: EntityManager,
|
|
77
79
|
openTelemetryCollector: OpenTelemetryCollector<Metrics>,
|
|
78
80
|
schemaValidator: SchemaValidator,
|
|
79
|
-
|
|
81
|
+
mappers: {
|
|
80
82
|
RoleDtoMapper: ResponseDtoMapperConstructor<
|
|
81
83
|
SchemaValidator,
|
|
82
84
|
Dto['RoleDtoMapper'],
|
|
@@ -92,6 +94,9 @@ export declare class BaseRoleService<
|
|
|
92
94
|
Dto['UpdateRoleDtoMapper'],
|
|
93
95
|
Entities['UpdateRoleDtoMapper']
|
|
94
96
|
>;
|
|
97
|
+
},
|
|
98
|
+
options?: {
|
|
99
|
+
telemetry?: TelemetryOptions;
|
|
95
100
|
}
|
|
96
101
|
);
|
|
97
102
|
createRole(
|
|
@@ -102,8 +107,8 @@ export declare class BaseRoleService<
|
|
|
102
107
|
roleDtos: Dto['CreateRoleDtoMapper'][],
|
|
103
108
|
em?: EntityManager
|
|
104
109
|
): Promise<Dto['RoleDtoMapper'][]>;
|
|
105
|
-
getRole(
|
|
106
|
-
getBatchRoles(
|
|
110
|
+
getRole({ id }: IdDto, em?: EntityManager): Promise<RoleDto>;
|
|
111
|
+
getBatchRoles({ ids }: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
|
|
107
112
|
updateRole(
|
|
108
113
|
roleDto: Dto['UpdateRoleDtoMapper'],
|
|
109
114
|
em?: EntityManager
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}
|