Files
website/src/lib/permissions.ts
bytedream 8cb1e8bec5
All checks were successful
delpoy / build-and-deploy (push) Successful in 40s
add admin tools page
2024-12-03 14:04:15 +01:00

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;
}
}