pwm-ng-permission
Version:
This Is Dynamic Angular Permission Controler Based On Roles.
68 lines (52 loc) • 1.82 kB
text/typescript
import { Injectable, EventEmitter } from "@angular/core";
()
export class PermissionService {
private _permissionStore: Array<string> = [];
private _permissionStoreChange: EventEmitter<any> = new EventEmitter();
constructor() {}
public define(permissions: Array<string>): 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<string>): 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;
return false;
});
}
public clearStore(): void {
this._permissionStore = [];
}
get store(): Array<string> {
return this._permissionStore;
}
get permissionStoreChangeEmitter(): EventEmitter<any> {
return this._permissionStoreChange;
}
}