|
|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
|
import { map } from 'rxjs/operators';
|
|
|
|
|
import { map, tap } from 'rxjs/operators';
|
|
|
|
|
import snq from 'snq';
|
|
|
|
|
import { ApplicationConfiguration } from '../models/application-configuration';
|
|
|
|
|
import { ConfigStateService } from './config-state.service';
|
|
|
|
|
@ -9,7 +9,9 @@ export class PermissionService {
|
|
|
|
|
constructor(private configState: ConfigStateService) {}
|
|
|
|
|
|
|
|
|
|
getGrantedPolicy$(key: string) {
|
|
|
|
|
return this.getStream().pipe(map(policies => this.isPolicyGranted(key, policies)));
|
|
|
|
|
return this.getStream().pipe(
|
|
|
|
|
map(grantedPolicies => this.isPolicyGranted(key, grantedPolicies)),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGrantedPolicy(key: string) {
|
|
|
|
|
@ -17,7 +19,7 @@ export class PermissionService {
|
|
|
|
|
return this.isPolicyGranted(key, policies);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private isPolicyGranted(key: string, policies: ApplicationConfiguration.Policy) {
|
|
|
|
|
private isPolicyGranted(key: string, grantedPolicies: ApplicationConfiguration.Policy) {
|
|
|
|
|
if (!key) return true;
|
|
|
|
|
|
|
|
|
|
const orRegexp = /\|\|/g;
|
|
|
|
|
@ -29,16 +31,16 @@ export class PermissionService {
|
|
|
|
|
|
|
|
|
|
if (keys.length < 2) return false;
|
|
|
|
|
|
|
|
|
|
return keys.some(k => this.getPolicy(k.trim(), policies));
|
|
|
|
|
return keys.some(k => this.getPolicy(k.trim(), grantedPolicies));
|
|
|
|
|
} else if (andRegexp.test(key)) {
|
|
|
|
|
const keys = key.split('&&').filter(Boolean);
|
|
|
|
|
|
|
|
|
|
if (keys.length < 2) return false;
|
|
|
|
|
|
|
|
|
|
return keys.every(k => this.getPolicy(k.trim(), policies));
|
|
|
|
|
return keys.every(k => this.getPolicy(k.trim(), grantedPolicies));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return this.getPolicy(key, policies);
|
|
|
|
|
return this.getPolicy(key, grantedPolicies);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getStream() {
|
|
|
|
|
@ -53,7 +55,7 @@ export class PermissionService {
|
|
|
|
|
return snq(() => applicationConfiguration.auth.grantedPolicies);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getPolicy(policy: string, policies: ApplicationConfiguration.Policy) {
|
|
|
|
|
return snq(() => policies[policy], false);
|
|
|
|
|
private getPolicy(key: string, grantedPolicies: ApplicationConfiguration.Policy) {
|
|
|
|
|
return snq(() => grantedPolicies[key], false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|