permissions middleware

This commit is contained in:
Julian Krauser 2024-08-27 11:47:27 +02:00
parent c7e48c0334
commit 1d2b5ea420
7 changed files with 86 additions and 25 deletions

View file

@ -11,27 +11,36 @@ import {
import ForbiddenRequestException from "../exceptions/forbiddenRequestException";
export default class PermissionHelper {
static passCheckMiddleware(
static can(
permissions: PermissionObject,
type: PermissionType | "admin",
section: PermissionSection,
module: PermissionModule,
requiredPermissions: Array<PermissionType> | "*"
module?: PermissionModule
) {
if (type == "admin") return permissions.admin ?? false;
if (permissions.admin) return true;
if (
(!module &&
permissions[section] != undefined &&
(permissions[section]?.all == "*" || permissions[section]?.all?.includes(type))) ||
permissions[section]?.all == "*" ||
permissions[section]?.all?.includes(type)
)
return true;
if (module && (permissions[section]?.[module] == "*" || permissions[section]?.[module]?.includes(type)))
return true;
return false;
}
static passCheckMiddleware(
requiredPermissions: PermissionType | "admin",
section: PermissionSection,
module?: PermissionModule
): (req: Request, res: Response, next: Function) => void {
return (req: Request, res: Response, next: Function) => {
const permissions = req.rights;
const permissions = req.permissions;
if (permissions.admin) {
next();
} else if (permissions?.[section]?.all) {
next();
} else if (permissions?.[section]?.all) {
next();
} else if (permissions?.[section]?.[module] == "*") {
next();
} else if (
(permissions?.[section]?.[module] as Array<PermissionType>).some((e: PermissionType) =>
requiredPermissions.includes(e)
)
) {
if (this.can(permissions, requiredPermissions, section, module)) {
next();
} else {
throw new ForbiddenRequestException(