@vortex-js/core
Version:
A simple and powerful role-based access control (RBAC) middleware for Express.js, designed to be easy to use and integrate with your existing applications. It provides a flexible way to manage user permissions and roles, making it ideal for building secur
51 lines (50 loc) • 1.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractRoutesAndroles = extractRoutesAndroles;
const Route_1 = __importDefault(require("../../../core/Route"));
const Routes_1 = __importDefault(require("../../../core/Routes"));
const errors_1 = require("../../../errors");
function extractRoutesAndroles(routes, prefix = "", depth = 0) {
const rais = [];
const roles = new Set();
for (let i = 0; i < routes.length; i++) {
if (routes[i] instanceof Routes_1.default) {
const route = routes[i];
const newPrefix = (prefix + route.prefix);
const { routes: nestedRoutes, roles: nestedroles } = extractRoutesAndroles(route.routes, newPrefix, depth + 1);
rais.push(...nestedRoutes);
nestedroles.forEach((p) => roles.add(p));
}
else if (routes[i] instanceof Route_1.default) {
const route = routes[i];
if (!route.roles?.length) {
throw new errors_1.InvalidRouteError(`
INVALID roles FIELD:
METHOD : ${prefix + route.method}
PATH : ${route.path}
NAME : ${route.name}
DESCRIPTION : ${route.description}
RESOURCE : ${route.rai}
`);
}
const rai = {
_id: route.rai,
method: route.method,
path: prefix + route.path,
name: route.name,
description: route.description,
rai: route.rai,
roles: route.roles,
children: [],
isStopped: false,
module: route.module?.name || "core",
};
rais.push(rai);
route.roles.forEach((role) => roles.add(role));
}
}
return { routes: rais, roles: Array.from(roles) };
}