修改管理后台
This commit is contained in:
251
backend/examples/operation-log-integration.js
Normal file
251
backend/examples/operation-log-integration.js
Normal file
@@ -0,0 +1,251 @@
|
||||
/**
|
||||
* 操作日志集成示例
|
||||
* @file operation-log-integration.js
|
||||
* @description 展示如何在现有控制器中集成操作日志记录
|
||||
*/
|
||||
|
||||
const { createOperationLogger } = require('../middleware/operationLogger');
|
||||
|
||||
// 示例1: 用户管理控制器集成操作日志
|
||||
const userControllerWithLogs = {
|
||||
// 创建用户 - 集成操作日志
|
||||
createUser: [
|
||||
// 操作日志中间件
|
||||
createOperationLogger({
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => res.body?.data?.id || null,
|
||||
getOperationDesc: (req, res) => `创建用户: ${req.body.username}`,
|
||||
getOldData: () => null,
|
||||
getNewData: (req, res) => res.body?.data || null
|
||||
}),
|
||||
|
||||
// 原有的创建用户逻辑
|
||||
async (req, res) => {
|
||||
try {
|
||||
// 创建用户逻辑
|
||||
const user = await User.create(req.body);
|
||||
res.json({
|
||||
success: true,
|
||||
data: user,
|
||||
message: '用户创建成功'
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '用户创建失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
// 更新用户 - 集成操作日志
|
||||
updateUser: [
|
||||
createOperationLogger({
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => req.params.id,
|
||||
getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`,
|
||||
getOldData: async (req, res) => {
|
||||
// 获取更新前的数据
|
||||
const oldUser = await User.findByPk(req.params.id);
|
||||
return oldUser ? oldUser.toJSON() : null;
|
||||
},
|
||||
getNewData: (req, res) => res.body?.data || req.body
|
||||
}),
|
||||
|
||||
async (req, res) => {
|
||||
try {
|
||||
const user = await User.findByPk(req.params.id);
|
||||
if (!user) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '用户不存在'
|
||||
});
|
||||
}
|
||||
|
||||
await user.update(req.body);
|
||||
res.json({
|
||||
success: true,
|
||||
data: user,
|
||||
message: '用户更新成功'
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '用户更新失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
// 删除用户 - 集成操作日志
|
||||
deleteUser: [
|
||||
createOperationLogger({
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => req.params.id,
|
||||
getOperationDesc: (req, res) => `删除用户: ${req.params.id}`,
|
||||
getOldData: async (req, res) => {
|
||||
// 获取删除前的数据
|
||||
const oldUser = await User.findByPk(req.params.id);
|
||||
return oldUser ? oldUser.toJSON() : null;
|
||||
},
|
||||
getNewData: () => null
|
||||
}),
|
||||
|
||||
async (req, res) => {
|
||||
try {
|
||||
const user = await User.findByPk(req.params.id);
|
||||
if (!user) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '用户不存在'
|
||||
});
|
||||
}
|
||||
|
||||
await user.destroy();
|
||||
res.json({
|
||||
success: true,
|
||||
message: '用户删除成功'
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '用户删除失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
// 示例2: 农场管理控制器集成操作日志
|
||||
const farmControllerWithLogs = {
|
||||
// 创建农场 - 集成操作日志
|
||||
createFarm: [
|
||||
createOperationLogger({
|
||||
moduleName: '农场管理',
|
||||
tableName: 'farms',
|
||||
getRecordId: (req, res) => res.body?.data?.id || null,
|
||||
getOperationDesc: (req, res) => `创建农场: ${req.body.name}`,
|
||||
getOldData: () => null,
|
||||
getNewData: (req, res) => res.body?.data || null
|
||||
}),
|
||||
|
||||
async (req, res) => {
|
||||
try {
|
||||
const farm = await Farm.create(req.body);
|
||||
res.json({
|
||||
success: true,
|
||||
data: farm,
|
||||
message: '农场创建成功'
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '农场创建失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
// 示例3: 批量操作日志记录
|
||||
const batchOperationLogger = createBatchOperationLogger([
|
||||
{
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => req.params.id,
|
||||
getOperationDesc: (req, res) => `批量操作用户: ${req.params.id}`,
|
||||
getOldData: () => null,
|
||||
getNewData: (req, res) => res.body
|
||||
},
|
||||
{
|
||||
moduleName: '权限管理',
|
||||
tableName: 'user_roles',
|
||||
getRecordId: (req, res) => req.params.id,
|
||||
getOperationDesc: (req, res) => `更新用户角色: ${req.params.id}`,
|
||||
getOldData: () => null,
|
||||
getNewData: (req, res) => req.body.roles
|
||||
}
|
||||
]);
|
||||
|
||||
// 示例4: 在Express路由中使用
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
// 用户路由
|
||||
router.post('/users',
|
||||
createOperationLogger({
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => res.body?.data?.id || null,
|
||||
getOperationDesc: (req, res) => `创建用户: ${req.body.username}`,
|
||||
getOldData: () => null,
|
||||
getNewData: (req, res) => res.body?.data || null
|
||||
}),
|
||||
userControllerWithLogs.createUser[1] // 实际的控制器函数
|
||||
);
|
||||
|
||||
router.put('/users/:id',
|
||||
createOperationLogger({
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => req.params.id,
|
||||
getOperationDesc: (req, res) => `更新用户: ${req.body.username || req.params.id}`,
|
||||
getOldData: async (req, res) => {
|
||||
const oldUser = await User.findByPk(req.params.id);
|
||||
return oldUser ? oldUser.toJSON() : null;
|
||||
},
|
||||
getNewData: (req, res) => res.body?.data || req.body
|
||||
}),
|
||||
userControllerWithLogs.updateUser[1]
|
||||
);
|
||||
|
||||
router.delete('/users/:id',
|
||||
createOperationLogger({
|
||||
moduleName: '用户管理',
|
||||
tableName: 'users',
|
||||
getRecordId: (req, res) => req.params.id,
|
||||
getOperationDesc: (req, res) => `删除用户: ${req.params.id}`,
|
||||
getOldData: async (req, res) => {
|
||||
const oldUser = await User.findByPk(req.params.id);
|
||||
return oldUser ? oldUser.toJSON() : null;
|
||||
},
|
||||
getNewData: () => null
|
||||
}),
|
||||
userControllerWithLogs.deleteUser[1]
|
||||
);
|
||||
|
||||
module.exports = {
|
||||
userControllerWithLogs,
|
||||
farmControllerWithLogs,
|
||||
batchOperationLogger,
|
||||
router
|
||||
};
|
||||
|
||||
/**
|
||||
* 使用说明:
|
||||
*
|
||||
* 1. 在需要记录操作日志的控制器方法前添加 createOperationLogger 中间件
|
||||
* 2. 配置中间件参数:
|
||||
* - moduleName: 模块名称(如:用户管理、农场管理)
|
||||
* - tableName: 数据表名(如:users、farms)
|
||||
* - getRecordId: 获取记录ID的函数
|
||||
* - getOperationDesc: 获取操作描述的函数
|
||||
* - getOldData: 获取操作前数据的函数(可选)
|
||||
* - getNewData: 获取操作后数据的函数(可选)
|
||||
*
|
||||
* 3. 操作日志会自动记录以下信息:
|
||||
* - 操作用户信息(从req.user获取)
|
||||
* - 操作类型(CREATE/UPDATE/DELETE)
|
||||
* - 操作描述
|
||||
* - 数据变化(操作前后的数据)
|
||||
* - 请求信息(IP、URL、方法等)
|
||||
* - 响应信息(状态码、执行时间等)
|
||||
*
|
||||
* 4. 对于批量操作,可以使用 createBatchOperationLogger 记录多个操作
|
||||
*/
|
||||
Reference in New Issue
Block a user