RED-3804: Fixed disappearing disabled entity permissions

This commit is contained in:
Adina Țeudan 2022-04-11 13:38:10 +03:00
parent cb4969df23
commit db1095ce3b
2 changed files with 22 additions and 2 deletions

View File

@ -8,7 +8,7 @@ export class PermissionsGuard implements CanActivate {
constructor(private readonly _entityPermissionsService: EntityPermissionsService) {}
async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
const targetObject = route.data.permissionsObject;
const targetObject: string = route.data.permissionsObject;
await firstValueFrom(this._entityPermissionsService.loadConfigFor(targetObject));
await firstValueFrom(this._entityPermissionsService.loadFor(targetObject));
return true;

View File

@ -28,7 +28,10 @@ export class EntityPermissionsService extends GenericService<IPermissionsMapping
loadFor(targetObject: string): Observable<PermissionsMapping[]> {
return this._http.get<IPermissionsMapping[]>(`/${this._defaultModelPath}/${targetObject}`).pipe(
mapEach(mapping => new PermissionsMapping(mapping, targetObject)),
tap(mappings => this._permissionsMapService.set(targetObject, mappings)),
tap(mappings => {
this.#addMissingPermissions(mappings, targetObject);
this._permissionsMapService.set(targetObject, mappings);
}),
);
}
@ -46,4 +49,21 @@ export class EntityPermissionsService extends GenericService<IPermissionsMapping
}
return this._post(permissions, `${this._defaultModelPath}/${targetObject}`).pipe(switchMap(() => this.loadFor(targetObject)));
}
#addMissingPermissions(mappings: PermissionsMapping[], targetObject: string): void {
const configuration = this._permissionsConfigurationMapService.get(targetObject);
for (const mapping of configuration) {
const targetPermission: string = mapping.targetPermission.name;
if (!mappings.some(p => p.targetPermission.name === targetPermission)) {
const missingConfig: PermissionsMapping = new PermissionsMapping(
{
mappedPermissions: [],
targetPermission: mapping.targetPermission,
},
targetObject,
);
mappings.push(missingConfig);
}
}
}
}