permissions middleware
This commit is contained in:
parent
c7e48c0334
commit
1d2b5ea420
7 changed files with 86 additions and 25 deletions
|
@ -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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue