WARCH2 增加企微审批历史只读查询
这个提交包含在:
@@ -0,0 +1,66 @@
|
||||
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;
|
||||
在新工单中引用
屏蔽一个用户