angular-sidebar-menu
Version:
The sources for this package are in the [Angular Sidebar Menu](https://github.com/mledour/angular-sidebar-menu) repo. Please file issues and pull requests against that repo.
40 lines • 6.29 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
export class RoleService {
constructor() {
this.role$ = new BehaviorSubject(undefined);
this.unAuthorizedVisibility$ = new BehaviorSubject('hidden');
}
set role(role) {
this.role$.next(role);
}
set unAuthorizedVisibility(visibility) {
this.unAuthorizedVisibility$.next(visibility);
}
showItem$(roles) {
return this.itemVisibilityBase$(roles).pipe(map((values) => values.isAuthorized || (!values.isAuthorized && values.unAuthorizedVisibility !== 'hidden')));
}
disableItem$(roles) {
return this.itemVisibilityBase$(roles).pipe(map((values) => !values.isAuthorized && values.unAuthorizedVisibility === 'disabled'));
}
itemVisibilityBase$(roles) {
return combineLatest([
this.role$.pipe(map((role) => this.isAuthorized(role, roles))),
this.unAuthorizedVisibility$,
]).pipe(map((value) => ({ isAuthorized: value[0], unAuthorizedVisibility: value[1] })));
}
isRole(role) {
return typeof role === 'string' || typeof role === 'number';
}
isAuthorized(userRole, itemRoles) {
if (!this.isRole(userRole) || !itemRoles || itemRoles.length === 0) {
return true;
}
return itemRoles.includes(userRole);
}
}
RoleService.decorators = [
{ type: Injectable }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zcmMvbGliL2ludGVybmFsL3JvbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU9yQyxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVVLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBbUIsU0FBUyxDQUFDLENBQUM7UUFDekQsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBQXlCLFFBQVEsQ0FBQyxDQUFDO0lBMEMxRixDQUFDO0lBeENDLElBQUksSUFBSSxDQUFDLElBQXNCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLHNCQUFzQixDQUFDLFVBQWtDO1FBQzNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDekMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUM3RyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFjO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDekMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLHNCQUFzQixLQUFLLFVBQVUsQ0FBQyxDQUN0RixDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQixDQUN6QixLQUFjO1FBRWQsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyx1QkFBdUI7U0FDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTyxNQUFNLENBQUMsSUFBVztRQUN4QixPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUM7SUFDOUQsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFlLEVBQUUsU0FBa0I7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQVEsU0FBb0IsQ0FBQyxRQUFRLENBQUMsUUFBZ0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7OztZQTVDRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVW5BdXRob3JpemVkVmlzaWJpbGl0eSB9IGZyb20gJy4uL3NpZGViYXItbWVudS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgdHlwZSBSb2xlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm9sZVNlcnZpY2Uge1xuICBwcml2YXRlIHJvbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSb2xlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHVuQXV0aG9yaXplZFZpc2liaWxpdHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVbkF1dGhvcml6ZWRWaXNpYmlsaXR5PignaGlkZGVuJyk7XG5cbiAgc2V0IHJvbGUocm9sZTogUm9sZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucm9sZSQubmV4dChyb2xlKTtcbiAgfVxuXG4gIHNldCB1bkF1dGhvcml6ZWRWaXNpYmlsaXR5KHZpc2liaWxpdHk6IFVuQXV0aG9yaXplZFZpc2liaWxpdHkpIHtcbiAgICB0aGlzLnVuQXV0aG9yaXplZFZpc2liaWxpdHkkLm5leHQodmlzaWJpbGl0eSk7XG4gIH1cblxuICBzaG93SXRlbSQocm9sZXM/OiBSb2xlW10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmlzaWJpbGl0eUJhc2UkKHJvbGVzKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pc0F1dGhvcml6ZWQgfHwgKCF2YWx1ZXMuaXNBdXRob3JpemVkICYmIHZhbHVlcy51bkF1dGhvcml6ZWRWaXNpYmlsaXR5ICE9PSAnaGlkZGVuJykpXG4gICAgKTtcbiAgfVxuXG4gIGRpc2FibGVJdGVtJChyb2xlcz86IFJvbGVbXSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1WaXNpYmlsaXR5QmFzZSQocm9sZXMpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlcykgPT4gIXZhbHVlcy5pc0F1dGhvcml6ZWQgJiYgdmFsdWVzLnVuQXV0aG9yaXplZFZpc2liaWxpdHkgPT09ICdkaXNhYmxlZCcpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXRlbVZpc2liaWxpdHlCYXNlJChcbiAgICByb2xlcz86IFJvbGVbXVxuICApOiBPYnNlcnZhYmxlPHsgaXNBdXRob3JpemVkOiBib29sZWFuOyB1bkF1dGhvcml6ZWRWaXNpYmlsaXR5OiBVbkF1dGhvcml6ZWRWaXNpYmlsaXR5IH0+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnJvbGUkLnBpcGUobWFwKChyb2xlKSA9PiB0aGlzLmlzQXV0aG9yaXplZChyb2xlLCByb2xlcykpKSxcbiAgICAgIHRoaXMudW5BdXRob3JpemVkVmlzaWJpbGl0eSQsXG4gICAgXSkucGlwZShtYXAoKHZhbHVlKSA9PiAoeyBpc0F1dGhvcml6ZWQ6IHZhbHVlWzBdLCB1bkF1dGhvcml6ZWRWaXNpYmlsaXR5OiB2YWx1ZVsxXSB9KSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1JvbGUocm9sZT86IFJvbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHJvbGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByb2xlID09PSAnbnVtYmVyJztcbiAgfVxuXG4gIHByaXZhdGUgaXNBdXRob3JpemVkKHVzZXJSb2xlPzogUm9sZSwgaXRlbVJvbGVzPzogUm9sZVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzUm9sZSh1c2VyUm9sZSkgfHwgIWl0ZW1Sb2xlcyB8fCBpdGVtUm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGl0ZW1Sb2xlcyBhcyBSb2xlW10pLmluY2x1ZGVzKHVzZXJSb2xlIGFzIFJvbGUpO1xuICB9XG59XG4iXX0=