fix: restrict PUT /tickets to admin's own claims (enforce claim system)

This commit is contained in:
2026-07-13 18:19:28 +08:00
parent 2a18b4b1a8
commit 8d9e154ce1

View File

@@ -181,6 +181,7 @@ router.post('/', optionalAuth, upload.array('files', 5), finalizeUpload, validat
router.put('/:id', authenticate, requireRole('owner','admin'), async (req, res) => { router.put('/:id', authenticate, requireRole('owner','admin'), async (req, res) => {
const t = await getRow('SELECT * FROM tickets WHERE id = ?', [req.params.id]); const t = await getRow('SELECT * FROM tickets WHERE id = ?', [req.params.id]);
if (!t) return res.status(404).json({ error: '工单不存在' }); if (!t) return res.status(404).json({ error: '工单不存在' });
if (req.user.role === 'admin' && t.assigned_to && t.assigned_to !== req.user.id) return res.status(403).json({ error: '只能修改自己负责的工单' });
if (t.status === 'closed' && req.user.role !== 'owner') return res.status(400).json({ error: '已关闭的工单仅服主可操作' }); if (t.status === 'closed' && req.user.role !== 'owner') return res.status(400).json({ error: '已关闭的工单仅服主可操作' });
const fields = {}; const fields = {};
if (req.body.status) fields.status = req.body.status; if (req.body.status) fields.status = req.body.status;