From 9bcd2085f57882a3a7c7e64584f22f040dccede8 Mon Sep 17 00:00:00 2001 From: Chris Rodriguez Date: Thu, 30 Jan 2025 16:53:54 -0500 Subject: [PATCH] Allow creator's of POAM to delete draft POAMs --- api/Services/poamService.js | 61 +++++++++++----- .../poam-details/poam-details.component.html | 6 +- .../poam-details/poam-details.component.ts | 73 +++++++++++-------- 3 files changed, 89 insertions(+), 51 deletions(-) diff --git a/api/Services/poamService.js b/api/Services/poamService.js index 7b67a818..ddb7e543 100644 --- a/api/Services/poamService.js +++ b/api/Services/poamService.js @@ -698,30 +698,55 @@ exports.updatePoamStatus = async function updatePoamStatus(req, res, next) { } }; - exports.deletePoam = async function deletePoam(req, res, next) { - if (!req.params.poamId) { +exports.deletePoam = async function deletePoam(req, res, next) { + if (!req.params.poamId) { + return next({ + status: 400, + errors: { + poamId: 'is required', + } + }); + } + + let validatePermissionsSql = ` + SELECT cp.accessLevel + FROM cpat.collectionpermissions cp + JOIN cpat.poam p ON cp.collectionId = p.collectionId + WHERE cp.userId = ? AND p.poamId = ? + `; + + try { + const [rows] = await connection.query(validatePermissionsSql, [req.userObject.userId, req.params.poamId]); + + if (rows.length === 0 || rows[0].accessLevel < 2) { return next({ - status: 400, + status: 403, errors: { - poamId: 'is required', + permission: 'User does not have permission to delete this POAM', } }); } - try { - await withConnection(async (connection) => { - await connection.beginTransaction(); + await withConnection(async (connection) => { + await connection.beginTransaction(); - let sqlDeleteAssets = "DELETE FROM cpat.poamassets WHERE poamId = ?;"; - await connection.query(sqlDeleteAssets, [req.params.poamId]); + let sqlDeleteAssets = "DELETE FROM cpat.poamassets WHERE poamId = ?;"; + await connection.query(sqlDeleteAssets, [req.params.poamId]); - let sqlDeletePoam = "DELETE FROM cpat.poam WHERE poamId = ?;"; - await connection.query(sqlDeletePoam, [req.params.poamId]); + let sqlDeletePoam = "DELETE FROM cpat.poam WHERE poamId = ?;"; + await connection.query(sqlDeletePoam, [req.params.poamId]); - await connection.commit(); - }); - return {}; - } catch (error) { - return { error: error.message }; - } - }; \ No newline at end of file + await connection.commit(); + }); + + res.status(200).json({ message: "POAM deleted successfully" }); + + } catch (error) { + return next({ + status: 500, + errors: { + database: error.message, + } + }); + } +}; \ No newline at end of file diff --git a/client/src/app/pages/poam-processing/poam-details/poam-details.component.html b/client/src/app/pages/poam-processing/poam-details/poam-details.component.html index 2badb1b0..48f8d1cf 100644 --- a/client/src/app/pages/poam-processing/poam-details/poam-details.component.html +++ b/client/src/app/pages/poam-processing/poam-details/poam-details.component.html @@ -1,4 +1,4 @@ -