This commit is contained in:
80
src/util/permissions.ts
Normal file
80
src/util/permissions.ts
Normal 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
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user