27 lines
887 B
TypeScript
27 lines
887 B
TypeScript
import type { RequestHandler } from "express";
|
|
|
|
import type { IdentityUseCases } from "../../application/identity.use-cases";
|
|
|
|
/** Guard público de resources.global.manage; no concede acceso a compañías ajenas. */
|
|
export function requireGlobalResourceManager(useCases: IdentityUseCases): RequestHandler {
|
|
return (request, response, next) => {
|
|
const { userId, authVersion } = request.session;
|
|
const context = userId && authVersion !== undefined ? { userId, authVersion } : undefined;
|
|
|
|
useCases
|
|
.canManageGlobalResources(context)
|
|
.then((result) => {
|
|
if (!result.isSuccess) {
|
|
response.status(result.error.code === "UNAUTHENTICATED" ? 401 : 403).json({
|
|
code: result.error.code,
|
|
requestId: response.getHeader("x-request-id"),
|
|
});
|
|
|
|
return;
|
|
}
|
|
next();
|
|
})
|
|
.catch(next);
|
|
};
|
|
}
|