import { Injectable } from '@angular/core'; import { SocketsService } from '../sockets/sockets.service'; import { Observable, Subject, BehaviorSubject } from 'rxjs'; const ON_PERMISSIONS_EVENT = 'currentPermissions'; const PERMISSIONS_ACTION = 'getPerms'; @Injectable() export class PermissionsService { private subject: Subject = new BehaviorSubject({ canWrite: false, canRead: false, isOwner: false }); constructor(private sockets: SocketsService) {} /** * parse permission object * @param permissions */ private _parsePermissions(permissions: any) { const permLvl: string = permissions.level.toLowerCase(); const permissionsObj = { canWrite: false, canRead: false, isOwner: false }; switch (permLvl) { case 'own': permissionsObj.canWrite = true; permissionsObj.canRead = true; permissionsObj.isOwner = true; break; case 'r': permissionsObj.canWrite = false; permissionsObj.canRead = true; permissionsObj.isOwner = false; break; case 'rw': permissionsObj.canWrite = true; permissionsObj.canRead = true; permissionsObj.isOwner = false; break; } return permissionsObj; } /** * load users permissions * @param bomId */ public loadPermissions(bomId: string) { this.sockets.emitAction(PERMISSIONS_ACTION, { bomId }); this.sockets .observeAction(ON_PERMISSIONS_EVENT) .subscribe((permissions: any) => { this.subject.next(this._parsePermissions(permissions)); }); } public getPermissions(): Observable { return this.subject; } }