From f9359d509a58f76f99a72f14ff09863366beb805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 10 Jan 2022 21:21:27 +0200 Subject: [PATCH] RED-3158: Fixed disabled accounts, again --- apps/red-ui/src/app/i18n/language.service.ts | 1 + .../user-button/user-button.component.scss | 1 + .../app/services/general-settings.service.ts | 6 +++--- .../src/app/utils/configuration.initializer.ts | 18 ++++++++++++------ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/red-ui/src/app/i18n/language.service.ts b/apps/red-ui/src/app/i18n/language.service.ts index d7a5b0c98..3a48ca225 100644 --- a/apps/red-ui/src/app/i18n/language.service.ts +++ b/apps/red-ui/src/app/i18n/language.service.ts @@ -8,6 +8,7 @@ import { UserPreferenceService } from '@services/user-preference.service'; export class LanguageService { constructor(private readonly _translateService: TranslateService, private readonly _userPreferenceService: UserPreferenceService) { _translateService.addLangs(['en', 'de']); + _translateService.setDefaultLang('en'); } get currentLanguage() { diff --git a/apps/red-ui/src/app/modules/shared/components/buttons/user-button/user-button.component.scss b/apps/red-ui/src/app/modules/shared/components/buttons/user-button/user-button.component.scss index 76c347ec3..eb363230f 100644 --- a/apps/red-ui/src/app/modules/shared/components/buttons/user-button/user-button.component.scss +++ b/apps/red-ui/src/app/modules/shared/components/buttons/user-button/user-button.component.scss @@ -3,6 +3,7 @@ :host { @extend .user-button; + min-width: fit-content; button { padding: 0 10px 0 5px; diff --git a/apps/red-ui/src/app/services/general-settings.service.ts b/apps/red-ui/src/app/services/general-settings.service.ts index 10353d8c2..2f5b18de8 100644 --- a/apps/red-ui/src/app/services/general-settings.service.ts +++ b/apps/red-ui/src/app/services/general-settings.service.ts @@ -1,17 +1,17 @@ import { Injectable, Injector } from '@angular/core'; import { GenericService, RequiredParam, Validate } from '@iqser/common-ui'; import { IGeneralConfiguration } from '@red/domain'; -import { UserService } from '@services/user.service'; +import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root', }) export class GeneralSettingsService extends GenericService { - constructor(protected readonly _injector: Injector, private readonly _userService: UserService) { + constructor(protected readonly _injector: Injector) { super(_injector, 'configuration'); } - getGeneralConfigurations() { + getGeneralConfigurations(): Observable { return this._getOne(['general']); } diff --git a/apps/red-ui/src/app/utils/configuration.initializer.ts b/apps/red-ui/src/app/utils/configuration.initializer.ts index 2f4bc4faf..8dab62065 100644 --- a/apps/red-ui/src/app/utils/configuration.initializer.ts +++ b/apps/red-ui/src/app/utils/configuration.initializer.ts @@ -1,11 +1,11 @@ -import { catchError, filter, mergeMap, switchMap, take, tap } from 'rxjs/operators'; +import { catchError, filter, mapTo, switchMap, take, tap } from 'rxjs/operators'; import { ConfigService } from '@services/config.service'; import { Title } from '@angular/platform-browser'; -import { from, of, throwError } from 'rxjs'; import { KeycloakEventType, KeycloakService } from 'keycloak-angular'; import { GeneralSettingsService } from '@services/general-settings.service'; import { LanguageService } from '@i18n/language.service'; import { UserPreferenceService } from '@services/user-preference.service'; +import { from, iif, of, throwError } from 'rxjs'; export function configurationInitializer( keycloakService: KeycloakService, @@ -15,16 +15,22 @@ export function configurationInitializer( languageService: LanguageService, userPreferenceService: UserPreferenceService, ) { + const userConfig$ = generalSettingsService.getGeneralConfigurations().pipe( + switchMap(config => from(userPreferenceService.reload()).pipe(mapTo(config))), + tap(() => languageService.chooseAndSetInitialLanguage()), + ); + return () => keycloakService.keycloakEvents$ .pipe( filter(event => event.type === KeycloakEventType.OnReady), switchMap(() => from(keycloakService.isLoggedIn())), - switchMap(loggedIn => (!loggedIn ? throwError('Not Logged In') : of({}))), - mergeMap(() => generalSettingsService.getGeneralConfigurations()), + switchMap(loggedIn => { + const hasAnyRedRoles = !!keycloakService.getUserRoles().find(role => role.startsWith('RED_')); + return !loggedIn ? throwError('Not Logged In') : of(hasAnyRedRoles); + }), + switchMap(hasRoles => iif(() => !!hasRoles, userConfig$, of({ displayName: 'RedactManager' }))), tap(configuration => configService.updateDisplayName(configuration.displayName)), - switchMap(() => userPreferenceService.reload()), - tap(() => languageService.chooseAndSetInitialLanguage()), catchError(() => { title.setTitle('RedactManager'); return of({});