angular2-permission
Version:
Fully featured permission based access control for your angular 2.0 applications.
70 lines (53 loc) • 2.05 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;
});
}
public clearStore(): void {
this._permissionStore = [];
}
get store(): Array<string> {
return this._permissionStore;
}
get permissionStoreChangeEmitter(): EventEmitter<any> {
return this._permissionStoreChange;
}
}