diff --git a/src/lib/permissions.ts b/src/lib/permissions.ts index 612191a..85308a0 100644 --- a/src/lib/permissions.ts +++ b/src/lib/permissions.ts @@ -85,14 +85,9 @@ function toPermissionObj(config: PermissionDef): Record => { + + const parts: Array = [] + let mask = 1 + while (permission >= mask) { + const perm = permission & mask + if (perm > 0) parts.push(perm) + + mask <<= 1 + } + + return parts +} + +const _to_display_name = (permission: number): string => { + const name = _display_names.get(permission) + if (name != undefined) return name + + const names = _deconstruct(permission).map((value) => _display_names.get(value)).filter((value) => value != undefined) + + return names.join(" | ") +} export default { ...toPermissionObj(config), + ALL: (permission_group: Record): number => Object.values(permission_group).reduce((pv: number, cv: number) => pv | cv), + has: (user_permissions: number, permissions: number): boolean => (user_permissions & permissions) == permissions, any: (user_permissions: number, permissions: number): boolean => (user_permissions & permissions) > 0, - display_name: (permission: number): string|undefined => { - const name = _display_names.get(permission) - if (name != undefined) return name + iterate: (permission_group: Record): Array<{key: string, value: number, name: string}> => Object.entries(permission_group).map(([key, value]) => ({ key: key, value: value, name: _to_display_name(value)})), + is_meta: (permission: number) => permission != 0 && ((permission & (permission - 1)) != 0), - const names: Array = [] - let mask = 1 - while (permission >= mask) { - const current_perm = permission & mask - const current_name = _display_names.get(current_perm) - if (current_name != undefined) names.push(current_name) - - mask <<= 1 - } - - return names.join(" | ") - } + deconstruct: _deconstruct, + display_name: _to_display_name }