@helpio/common 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from "./types/auth";
|
|
|
8
8
|
export * from "./middlewares/current-user";
|
|
9
9
|
export * from "./middlewares/error-handler";
|
|
10
10
|
export * from "./middlewares/require-auth";
|
|
11
|
+
export * from "./middlewares/require-role";
|
|
11
12
|
export * from "./middlewares/validate-request";
|
|
12
13
|
export * from "./events/consumer";
|
|
13
14
|
export * from "./events/producer";
|
package/build/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./types/auth"), exports);
|
|
|
21
21
|
__exportStar(require("./middlewares/current-user"), exports);
|
|
22
22
|
__exportStar(require("./middlewares/error-handler"), exports);
|
|
23
23
|
__exportStar(require("./middlewares/require-auth"), exports);
|
|
24
|
+
__exportStar(require("./middlewares/require-role"), exports);
|
|
24
25
|
__exportStar(require("./middlewares/validate-request"), exports);
|
|
25
26
|
__exportStar(require("./events/consumer"), exports);
|
|
26
27
|
__exportStar(require("./events/producer"), exports);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from "express";
|
|
2
|
+
export declare const requireAnyRole: (allowedRoles: string[]) => (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
3
|
+
export declare const requireWorker: (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
4
|
+
export declare const requireEmployer: (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
5
|
+
export declare const requireOwner: (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
6
|
+
export declare const requireEmployerOrOwner: (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireEmployerOrOwner = exports.requireOwner = exports.requireEmployer = exports.requireWorker = exports.requireAnyRole = void 0;
|
|
4
|
+
const normalizeRole = (value) => {
|
|
5
|
+
if (typeof value !== "string")
|
|
6
|
+
return undefined;
|
|
7
|
+
const trimmed = value.trim();
|
|
8
|
+
return trimmed ? trimmed.toLowerCase() : undefined;
|
|
9
|
+
};
|
|
10
|
+
const getRoleCandidates = (req) => {
|
|
11
|
+
const currentUser = req.currentUser;
|
|
12
|
+
if (!currentUser)
|
|
13
|
+
return [];
|
|
14
|
+
const directRole = normalizeRole(currentUser.role);
|
|
15
|
+
const rolesArray = Array.isArray(currentUser.roles)
|
|
16
|
+
? currentUser.roles.map(normalizeRole).filter(Boolean)
|
|
17
|
+
: [];
|
|
18
|
+
const activeMode = normalizeRole(currentUser.activeMode);
|
|
19
|
+
return [directRole, activeMode, ...rolesArray].filter(Boolean);
|
|
20
|
+
};
|
|
21
|
+
const requireAnyRole = (allowedRoles) => {
|
|
22
|
+
const allowed = allowedRoles.map((r) => r.toLowerCase());
|
|
23
|
+
return (req, res, next) => {
|
|
24
|
+
const candidates = getRoleCandidates(req);
|
|
25
|
+
if (candidates.some((r) => allowed.includes(r))) {
|
|
26
|
+
return next();
|
|
27
|
+
}
|
|
28
|
+
return res.status(403).send({
|
|
29
|
+
error: "FORBIDDEN",
|
|
30
|
+
message: `Required role: ${allowedRoles.join(" | ")}`,
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.requireAnyRole = requireAnyRole;
|
|
35
|
+
exports.requireWorker = (0, exports.requireAnyRole)(["worker"]);
|
|
36
|
+
exports.requireEmployer = (0, exports.requireAnyRole)(["employer"]);
|
|
37
|
+
// Owner/admin access varies across deployments, so we accept a few common values.
|
|
38
|
+
exports.requireOwner = (0, exports.requireAnyRole)(["owner", "admin", "super_admin"]);
|
|
39
|
+
exports.requireEmployerOrOwner = (0, exports.requireAnyRole)([
|
|
40
|
+
"employer",
|
|
41
|
+
"owner",
|
|
42
|
+
"admin",
|
|
43
|
+
"super_admin",
|
|
44
|
+
]);
|