70 lines
1.4 KiB
TypeScript
70 lines
1.4 KiB
TypeScript
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;
|
|
}
|
|
}
|