export class Permissions { static readonly Admin = 2 << 0; static readonly Users = 2 << 1; static readonly Reports = 2 << 2; static readonly Feedback = 2 << 3; static readonly Settings = 2 << 4; static readonly Tools = 2 << 5; readonly value: number; constructor(value: number | number[] | null) { if (typeof value == 'number') { this.value = value; } else if (value == null) { this.value = 0; } else { let finalValue = 0; for (const v of Object.values(value)) { finalValue |= v; } this.value = finalValue; } } toJSON() { return this.value; } static allPermissions(): number[] { return [ Permissions.Admin, Permissions.Users, Permissions.Reports, Permissions.Feedback, Permissions.Settings, Permissions.Tools ]; } admin(): boolean { return (this.value & Permissions.Admin) != 0; } users(): boolean { return (this.value & Permissions.Users) != 0; } reports(): boolean { return (this.value & Permissions.Reports) != 0; } feedback(): boolean { return (this.value & Permissions.Reports) != 0; } settings(): boolean { return (this.value & Permissions.Reports) != 0; } tools(): boolean { return (this.value & Permissions.Tools) != 0; } asArray(): number[] { const array = []; for (const perm of Permissions.allPermissions()) { if ((this.value & perm) != 0) { array.push(perm); } } return array; } }