import { Injectable, EventEmitter } from '@angular/core'; @Injectable() export class PermissionService { private _permissionStore: Array = []; private _permissionStoreChange: EventEmitter = new EventEmitter(); constructor() { } public define(permissions: Array): void { if (!Array.isArray(permissions)) throw "permissions parameter is not array."; this.clearStore(); for (let permission of permissions) this.add(permission); } public add(permission: string): void { if (typeof permission === "string" && !this.hasDefined(permission.toLocaleLowerCase())) { this._permissionStore.push(permission.toLocaleLowerCase()); this._permissionStoreChange.emit(null); } } public remove(permission: string): void { if (typeof permission !== "string") return; let index = this._permissionStore.indexOf(permission.toLowerCase()); if (index < 0) return; this._permissionStore.splice(index, 1); this._permissionStoreChange.emit(null); } public hasDefined(permission: string): boolean { if (typeof permission !== "string") return false; let index = this._permissionStore.indexOf(permission.toLowerCase()); return index > -1; } public hasOneDefined(permissions: Array): boolean { if (!Array.isArray(permissions)) throw "permissions parameter is not array."; return permissions.some(v => { if (typeof v === "string") return this._permissionStore.indexOf(v.toLowerCase()) >= 0; }); } public clearStore(): void { this._permissionStore = []; } get store(): Array { return this._permissionStore; } get permissionStoreChangeEmitter(): EventEmitter { return this._permissionStoreChange; } }