Basic Permissions Class
A simple class to manage permissions
Basic permissions example with bitwise
Usage example at the bottom of the codeblock
class Permission {
permissions = 0;
private PERMISSIONS: { [key: string]: number } = {
none: 0,
read: 1 << 1,
write: 1 << 2,
admin: 1 << 3,
owner: 1 << 4,
// to add more permissions increase the last number by 1
};
constructor(permission = 0) {
this.permissions = permission;
}
getPermissions(): { int: number; array: string[] } {
const permissionKeys = Object.keys(this.PERMISSIONS);
const userPermissions = permissionKeys.filter((permissionKey) => {
const permissionValue = this.PERMISSIONS[permissionKey];
return (this.permissions & permissionValue) !== 0;
});
return { int: this.permissions, array: userPermissions };
}
setPermissions(
permissionarray: (keyof typeof Permission.prototype.PERMISSIONS)[]
): { int: number; array: string[] } {
let permissions = 0;
permissionarray.forEach((permissionKey) => {
const permissionValue = this.PERMISSIONS[permissionKey];
permissions += permissionValue;
});
this.permissions = permissions;
return this.getPermissions();
}
removePermissions(
permissionarray: (keyof typeof Permission.prototype.PERMISSIONS)[]
): { int: number; array: string[] } {
permissionarray.forEach((permissionKey) => {
const permissionValue = this.PERMISSIONS[permissionKey];
this.permissions &= ~permissionValue;
});
return this.getPermissions();
}
addPermissions(
permissionarray: (keyof typeof Permission.prototype.PERMISSIONS)[]
): { int: number; array: string[] } {
permissionarray.forEach((permissionKey) => {
const permissionValue = this.PERMISSIONS[permissionKey];
this.permissions |= permissionValue;
});
return this.getPermissions();
}
hasAnyPermission(
permissionarray: (keyof typeof Permission.prototype.PERMISSIONS)[]
): boolean {
return permissionarray.some((permissionKey) => {
const permissionValue = this.PERMISSIONS[permissionKey];
return (this.permissions & permissionValue) !== 0;
});
}
hasAllPermissions(
permissionarray: (keyof typeof Permission.prototype.PERMISSIONS)[]
): boolean {
return permissionarray.every((permissionKey) => {
const permissionValue = this.PERMISSIONS[permissionKey];
return (this.permissions & permissionValue) !== 0;
});
}
getPermissionKeys(): string[] {
return Object.keys(this.PERMISSIONS);
}
}
// HOW TO USE
// Initialize permissions and set user permission to 0
const permission = new Permission(0);
// set permissions
permission.setPermissions(["admin", "owner"]); // { int: 24, array: [ 'admin', 'owner' ] }
// get permissions
permission.getPermissions(); // { int: 24, array: [ 'admin', 'owner' ] }
// add permissions
permission.addPermissions(["read"]); // { int: 26, array: ['read', 'admin', 'owner' ] }
// remove permissions
permission.removePermissions(["admin"]); // { int: 18, array: [ 'read', 'owner' ] }
// returns true if atleast one permission matches
permission.hasAnyPermission(["read", "write", "admin"]); // true
// returns true if all permissions match
permission.hasAllPermissions(["admin"]); // false
// get all available permissions
permission.getPermissionKeys(); // ['none', 'admin',... etc]