populate Admin Rights by Ownership to permission object

This commit is contained in:
Julian Krauser 2025-04-08 09:21:57 +02:00
parent d8309af313
commit 03e92ea0d4
3 changed files with 13 additions and 7 deletions

View file

@ -55,7 +55,10 @@ export abstract class JWTHelper {
let rolePermissions =
userRoles.length != 0 ? await RolePermissionService.getByRoles(userRoles.map((e) => e.id)) : [];
let rolePermissionStrings = rolePermissions.map((e) => e.permission);
let permissionObject = PermissionHelper.convertToObject([...userPermissionStrings, ...rolePermissionStrings]);
let permissionObject = PermissionHelper.convertToObject(
[...userPermissionStrings, ...rolePermissionStrings],
isOwner
);
let jwtData: JWTToken = {
userId: id,

View file

@ -19,8 +19,8 @@ export default class PermissionHelper {
section: PermissionSection,
module?: PermissionModule
) {
if (type == "admin") return permissions?.admin ?? false;
if (permissions?.admin) return true;
if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false;
if (permissions?.admin || permissions?.adminByOwner) return true;
if (
(!module &&
permissions[section] != undefined &&
@ -52,8 +52,8 @@ export default class PermissionHelper {
type: PermissionType | "admin",
section: PermissionSection
): boolean {
if (type == "admin") return permissions?.admin ?? false;
if (permissions?.admin) return true;
if (type == "admin") return permissions?.admin ?? permissions?.adminByOwner ?? false;
if (permissions?.admin || permissions?.adminByOwner) return true;
if (
permissions[section]?.all == "*" ||
permissions[section]?.all?.includes(type) ||
@ -76,7 +76,7 @@ export default class PermissionHelper {
}
static canValue(permissions: PermissionObject, key: string, emptyIfAdmin: boolean = false): string {
if (emptyIfAdmin && permissions.admin) return "";
if (emptyIfAdmin && (permissions.admin || permissions.adminByOwner)) return "";
return permissions?.additional?.[key] ?? "";
}
@ -166,7 +166,7 @@ export default class PermissionHelper {
};
}
static convertToObject(permissions: Array<PermissionString>): PermissionObject {
static convertToObject(permissions: Array<PermissionString>, isOwner: boolean = false): PermissionObject {
let isAdmin = permissions.includes("*");
let additional: { [key: string]: string } = {};
@ -181,6 +181,7 @@ export default class PermissionHelper {
if (isAdmin) {
return {
admin: true,
adminByOwner: isOwner,
...(Object.keys(additional).length > 0 && { additional }),
};
}
@ -230,6 +231,7 @@ export default class PermissionHelper {
}
return {
adminByOwner: isOwner,
...output,
...(Object.keys(additional).length > 0 && { additional }),
};

View file

@ -18,6 +18,7 @@ export type PermissionObject = {
} & { all?: Array<PermissionType> | "*" };
} & {
admin?: boolean;
adminByOwner?: boolean;
} & {
additional?: { [key: string]: string };
};