initial commit
Some checks failed
deploy / build-and-deploy (push) Failing after 21s

This commit is contained in:
2025-05-18 13:16:20 +02:00
commit 60f3f8a096
148 changed files with 17900 additions and 0 deletions

80
src/util/permissions.ts Normal file
View File

@@ -0,0 +1,80 @@
export class Permissions {
static readonly Admin = new Permissions(2 << 0);
static readonly Users = new Permissions(2 << 1);
static readonly Reports = new Permissions(2 << 2);
static readonly Feedback = new Permissions(2 << 3);
static readonly Settings = new Permissions(2 << 4);
static readonly Tools = new Permissions(2 << 5);
readonly value: number;
constructor(value: number | number[] | Permissions[] | null) {
if (value == null) {
this.value = 0;
} else if (typeof value == 'number') {
this.value = value;
} else if (Array.isArray(value)) {
let finalValue = 0;
for (const v of value) {
if (typeof v == 'number') {
finalValue |= v;
} else {
finalValue |= v.value;
}
}
this.value = finalValue;
} else {
throw 'Invalid arguments';
}
}
toJSON() {
return this.value;
}
toNumberArray() {
const array = [];
if (this.admin) array.push(Permissions.Admin.value);
if (this.users) array.push(Permissions.Users.value);
if (this.reports) array.push(Permissions.Reports.value);
if (this.feedback) array.push(Permissions.Feedback.value);
if (this.settings) array.push(Permissions.Settings.value);
if (this.tools) array.push(Permissions.Tools.value);
return array;
}
get admin() {
return (this.value & Permissions.Admin.value) != 0;
}
get users() {
return (this.value & Permissions.Users.value) != 0;
}
get reports() {
return (this.value & Permissions.Reports.value) != 0;
}
get feedback() {
return (this.value & Permissions.Reports.value) != 0;
}
get settings() {
return (this.value & Permissions.Reports.value) != 0;
}
get tools() {
return (this.value & Permissions.Tools.value) != 0;
}
hasPermissions(other: Permissions) {
return (other.value & this.value) == other.value;
}
static allPermissions() {
return [
Permissions.Admin,
Permissions.Users,
Permissions.Reports,
Permissions.Feedback,
Permissions.Settings,
Permissions.Tools
];
}
}