feat(authorization): Implemented guards to avoid unauthorized access. (TV-515)
Squashed commit of the following: commit 86aa3af3f54be4ef5bfb99baece6654a7fba204f Merge: f3258e81e45fb5Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Thu Sep 9 05:42:46 2021 +0200 Merge branch 'develop' into feature/TV-515-authorization-flow commit f3258e8c6e3d51f21ec619e09c82b2d0f581bde9 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 16:43:44 2021 +0200 Fixed tests commit 91bfea1baa297f34769a33972fd61481dfa31197 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 15:55:13 2021 +0200 Removed unused pages commit d4a92fbde9d6255d8406abc23fe1479658035787 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 15:51:25 2021 +0200 Updated some styling commit dc75656ff96ff0358a2dd0a8b090b4b4938b8323 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 15:35:04 2021 +0200 Refactured guards by separating organizations into its own guard commit 24f3a0a2d821930bd682b854f98e1c9816ece08c Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 15:33:53 2021 +0200 Readded search on employees commit f1890b104c48d6dd6e263b730dbdafbc2a6fbf0f Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 14:59:24 2021 +0200 Added RoleGuard to pages needing a guard commit ef4b37e3dcc8fe26eef1bb813cfb35727ba691be Merge: 07bca2ab06436aAuthor: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 14:06:34 2021 +0200 Merge branch 'develop' into feature/TV-515-authorization-flow commit 07bca2a84d0ec970188c284ba4b950312cec57cb Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 13:26:50 2021 +0200 Added check for navigation
This commit is contained in:
@@ -17,23 +17,34 @@ import { AuthenticationService } from './authentication.service';
|
||||
})
|
||||
export class UserService extends UnsubscribeDirective {
|
||||
private _apiBaseUrl = `${environment.api.url}/auth`;
|
||||
private _isLoggedIn$: Observable<boolean> = this.authenticationService.isLoggedIn$;
|
||||
private _organizations$ = new BehaviorSubject<Organization[]>(null);
|
||||
public organizations$: Observable<Organization[]> = this._organizations$.asObservable();
|
||||
private _user$ = new BehaviorSubject<User>(null);
|
||||
public user$: Observable<User> = this._user$.asObservable();
|
||||
private _selectedOrganizationNumber$ = new BehaviorSubject<string>(null);
|
||||
|
||||
constructor(private httpClient: HttpClient, private authenticationService: AuthenticationService) {
|
||||
super();
|
||||
this._selectedOrganizationNumber$.next(this._selectedOrganizationNumber);
|
||||
super.unsubscribeOnDestroy(
|
||||
this.authenticationService.isLoggedIn$
|
||||
this._isLoggedIn$
|
||||
.pipe(
|
||||
filter(loggedIn => !!loggedIn),
|
||||
switchMap(() => combineLatest([this._fetchUserInfo$(), this._fetchOrganizations$()]))
|
||||
switchMap(() => this._fetchOrganizations$())
|
||||
)
|
||||
.subscribe(([userInfo, organizations]) => {
|
||||
this._user$.next({ ...userInfo, organizations });
|
||||
.subscribe(organizations => {
|
||||
this._organizations$.next(organizations);
|
||||
}),
|
||||
combineLatest([this._isLoggedIn$, this.selectedOrganization$])
|
||||
.pipe(
|
||||
filter(([loggedIn, selectedOrganization]) => !!(loggedIn && selectedOrganization)),
|
||||
switchMap(() => this._fetchUserInfo$())
|
||||
)
|
||||
.subscribe(userInfo => {
|
||||
this._user$.next({ ...userInfo, organizations: this._organizations$.value });
|
||||
})
|
||||
);
|
||||
this._selectedOrganizationNumber$.next(this._selectedOrganizationNumber);
|
||||
}
|
||||
|
||||
private _fetchOrganizations$(): Observable<Organization[]> {
|
||||
@@ -55,11 +66,11 @@ export class UserService extends UnsubscribeDirective {
|
||||
}
|
||||
|
||||
public get selectedOrganization$(): Observable<Organization | null> {
|
||||
return combineLatest([this._selectedOrganizationNumber$, this._user$]).pipe(
|
||||
filter(([, user]) => !!user),
|
||||
map(([organizationNumber, user]) => {
|
||||
return combineLatest([this._selectedOrganizationNumber$, this._organizations$]).pipe(
|
||||
filter(([, organizations]) => !!organizations?.length),
|
||||
map(([organizationNumber, organizations]) => {
|
||||
return organizationNumber
|
||||
? user.organizations.find(organization => organization.organizationNumber === organizationNumber)
|
||||
? organizations.find(organization => organization.organizationNumber === organizationNumber)
|
||||
: null;
|
||||
})
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user