optional permission & roles service

This commit is contained in:
Dan Percic 2022-10-26 12:46:59 +03:00
parent b35ed3f2f2
commit ee4040d759

View File

@ -1,4 +1,4 @@
import { inject, Injectable } from '@angular/core';
import { inject, Injectable, InjectFlags } from '@angular/core';
import { KeycloakService } from 'keycloak-angular';
import { BehaviorSubject, firstValueFrom, Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@ -34,8 +34,8 @@ export abstract class IqserUserService<
protected readonly _baseHref = inject(BASE_HREF);
protected readonly _keycloakService = inject(KeycloakService);
protected readonly _cacheApiService = inject(CacheApiService);
protected readonly _permissionsService = inject(IqserPermissionsService);
protected readonly _rolesService = inject(IqserRolesService);
protected readonly _permissionsService = inject(IqserPermissionsService, InjectFlags.Optional);
protected readonly _rolesService = inject(IqserRolesService, InjectFlags.Optional);
constructor() {
super();
@ -85,11 +85,11 @@ export abstract class IqserUserService<
const token = await this._keycloakService.getToken();
const decoded: IToken = jwt_decode(token);
const userId = decoded.sub;
const rolesField = this._keycloakService.getKeycloakInstance().realm || '';
this._permissionsService.load(decoded.resource_access[rolesField].roles);
const realm = this._keycloakService.getKeycloakInstance().realm || '';
this._permissionsService?.load(decoded.resource_access[realm].roles);
const roles = this._keycloakService.getUserRoles(true).filter(role => this._rolesFilter(role));
this._rolesService.load(roles);
this._rolesService?.load(roles);
const user = new this._entityClass(profile, roles, userId);
this.replace(user);