Permission Decoder
This snippet is a permission decoder.
This snippet demonstrates how to decode permission values represented by bit flags. The Permissions object defines various permission types POST
COMMENT
DELETE
UPDATE
with corresponding numeric values. The decodePermissions function takes a numeric permission value and returns a string representing the active permissions in human-readable form.
const Permissions = {
POST: 1,
COMMENT: 2,
DELETE: 4,
UPDATE: 8,
} as const;
type PermissionKey = keyof typeof Permissions;
interface DecodedPermissions {
permissions: string;
}
function decodePermissions(permissionValue: number | null | undefined): DecodedPermissions {
if (permissionValue == null || permissionValue === 0) {
return { permissions: "DEFAULT" };
}
const isValid = Object.values(Permissions).some(value => (permissionValue & value) !== 0);
if (!isValid) {
return { permissions: "INVALID PERMISSION VALUE" };
}
const decodedPermissions = Object.keys(Permissions)
.filter((permission) => (permissionValue & Permissions[permission as PermissionKey]) !== 0)
.map((permission) => permission.toUpperCase());
return { permissions: decodedPermissions.join(", ") };
}
export { decodePermissions, Permissions };
Example with Typescript
main.ts
const perms = Permissions.POST | Permissions.COMMENT;
console.log(decodePermissions(perms))
output
{
permissions: "POST, COMMENT",
}
Also you can input the permissions by the number, and you will get the same output.
main.ts
console.log(decodePermissions(3))
output
{
permissions: "POST, COMMENT",
}