change permission subject
This commit is contained in:
parent
ac72035f76
commit
be5689f7fb
|
@ -6,7 +6,7 @@ import {
|
|||
PermissionsList
|
||||
} from 'picsur-shared/dist/dto/permissions';
|
||||
import { AsyncFailable, HasFailed } from 'picsur-shared/dist/types';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { BehaviorSubject, filter, Observable, take } from 'rxjs';
|
||||
import { ApiService } from './api.service';
|
||||
import { UserService } from './user.service';
|
||||
|
||||
|
@ -18,18 +18,24 @@ export class PermissionService {
|
|||
this.onUser();
|
||||
}
|
||||
|
||||
public get live() {
|
||||
return this.permissionsSubject;
|
||||
public get live(): Observable<Permissions> {
|
||||
return this.permissionsSubject.pipe(
|
||||
filter((v) => v !== null)
|
||||
) as Observable<Permissions>;
|
||||
}
|
||||
|
||||
public get snapshot() {
|
||||
return this.permissionsSubject.getValue();
|
||||
public get snapshot(): Permissions {
|
||||
return (
|
||||
this.permissionsSubject.getValue() ?? (PermissionsList as Permissions)
|
||||
);
|
||||
}
|
||||
|
||||
public loadedSnapshot(): Promise<Permissions> {
|
||||
return new Promise((resolve) => this.live.pipe(take(1)).subscribe(resolve));
|
||||
}
|
||||
|
||||
// Lets be optimistic for better ux
|
||||
private permissionsSubject = new BehaviorSubject<Permissions>(
|
||||
PermissionsList as Permissions
|
||||
);
|
||||
private permissionsSubject = new BehaviorSubject<Permissions | null>(null);
|
||||
|
||||
@AutoUnsubscribe()
|
||||
private onUser() {
|
||||
|
|
|
@ -14,7 +14,7 @@ import { PermissionService } from '../api/permission.service';
|
|||
export class PermissionGuard implements CanActivate {
|
||||
constructor(private permissionService: PermissionService) {}
|
||||
|
||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||
const requiredPermissions: Permissions = route.data['permissions'];
|
||||
if (!isPermissionsArray(requiredPermissions)) {
|
||||
throw new Error(
|
||||
|
@ -22,16 +22,12 @@ export class PermissionGuard implements CanActivate {
|
|||
);
|
||||
}
|
||||
|
||||
const ourPermissions = this.permissionService.snapshot;
|
||||
const ourPermissions = await this.permissionService.loadedSnapshot();
|
||||
|
||||
const isOk = requiredPermissions.every((permission) =>
|
||||
ourPermissions.includes(permission)
|
||||
);
|
||||
|
||||
console.log(
|
||||
`PermissionGuard: requiredPermissions=${requiredPermissions} ourPermissions=${ourPermissions} isOk=${isOk}`
|
||||
);
|
||||
|
||||
return isOk;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue