67 行
1.9 KiB
JavaScript
67 行
1.9 KiB
JavaScript
const { getApprovalArchiveDetail, listApprovalArchives } = require("../services/integrations/wecomApprovalArchive");
|
|
const { AppError } = require("../utils/AppError");
|
|
const { sendData } = require("../utils/reply");
|
|
|
|
const ARCHIVE_VIEW_PERMISSIONS = new Set([
|
|
"leave.view_own",
|
|
"attendance.view_own",
|
|
"leave.view_all",
|
|
"attendance.view_all",
|
|
"*",
|
|
]);
|
|
|
|
function notFound() {
|
|
return new AppError({
|
|
code: "SYS_404",
|
|
message: "Not Found",
|
|
statusCode: 404,
|
|
});
|
|
}
|
|
|
|
function hasArchiveViewPermission(employee = {}) {
|
|
const roleCodes = employee.roleCodes || [];
|
|
const permissionCodes = employee.permissionCodes || [];
|
|
return roleCodes.includes("admin")
|
|
|| roleCodes.includes("hr")
|
|
|| permissionCodes.some((code) => ARCHIVE_VIEW_PERMISSIONS.has(code));
|
|
}
|
|
|
|
function ensureArchiveViewPermission(request) {
|
|
if (hasArchiveViewPermission(request.employee)) {
|
|
return;
|
|
}
|
|
throw new AppError({
|
|
code: "PERM_001",
|
|
message: "无权限",
|
|
statusCode: 403,
|
|
details: { permission: "leave.view_own|attendance.view_own" },
|
|
});
|
|
}
|
|
|
|
async function wecomApprovalArchiveRoutes(fastify) {
|
|
fastify.get("/wecom/approval-archive", { preHandler: fastify.authenticate }, async (request, reply) => {
|
|
ensureArchiveViewPermission(request);
|
|
const result = await listApprovalArchives({
|
|
prisma: fastify.prisma,
|
|
actor: request.employee,
|
|
query: request.query || {},
|
|
});
|
|
return sendData(reply, request, result);
|
|
});
|
|
|
|
fastify.get("/wecom/approval-archive/:id", { preHandler: fastify.authenticate }, async (request, reply) => {
|
|
ensureArchiveViewPermission(request);
|
|
const item = await getApprovalArchiveDetail({
|
|
prisma: fastify.prisma,
|
|
actor: request.employee,
|
|
archiveId: request.params?.id,
|
|
});
|
|
if (!item) {
|
|
throw notFound();
|
|
}
|
|
return sendData(reply, request, { item });
|
|
});
|
|
}
|
|
|
|
module.exports = wecomApprovalArchiveRoutes;
|