52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
const { CustomDeviceLabel, DeviceStat } = require('../../../models/Schemas');
|
|
|
|
async function updateLabelHandler(req, res) {
|
|
try {
|
|
// EXECUTIVE role is read-only — explicitly blocked from writing labels
|
|
if (req.user?.role === 'EXECUTIVE') {
|
|
return res.status(403).json({ ok: false, error: 'Executive role cannot modify device labels.' });
|
|
}
|
|
|
|
const isAuthorized = req.user?.role === 'SUPER_ADMIN' ||
|
|
req.user?.role === 'TENANT_ADMIN' ||
|
|
req.user?.role === 'COMPANY_ADMIN' ||
|
|
req.user?.role === 'COMPANY_OPERATOR' ||
|
|
req.user?._originalRole === 'SUPER_ADMIN' ||
|
|
req.user?._originalRole === 'TENANT_ADMIN';
|
|
|
|
if (!isAuthorized) {
|
|
return res.status(403).json({ ok: false, error: 'Only administrators can update device labels.' });
|
|
}
|
|
|
|
const { mac_address, device_label } = req.body;
|
|
if (!mac_address) return res.status(400).json({ ok: false, error: 'mac_address required' });
|
|
if (device_label === undefined) return res.status(400).json({ ok: false, error: 'device_label required' });
|
|
|
|
const isGlobalUser = req.user?.role === 'SUPER_ADMIN' ||
|
|
((!req.user?.site_uuid || req.user?.site_uuid === 'default') && ['SOC_ANALYST', 'ENGINEER'].includes(req.user?.role)) ||
|
|
req.user?._originalRole === 'SUPER_ADMIN';
|
|
|
|
if (!isGlobalUser && req.user?.site_uuid) {
|
|
const deviceExists = await DeviceStat.findOne({
|
|
mac_address,
|
|
site_uuid: req.user.site_uuid
|
|
});
|
|
if (!deviceExists) {
|
|
return res.status(403).json({ ok: false, error: 'Unauthorized: This device does not belong to your tenant.' });
|
|
}
|
|
}
|
|
|
|
await CustomDeviceLabel.findOneAndUpdate(
|
|
{ mac_address },
|
|
{ device_label },
|
|
{ upsert: true, new: true }
|
|
);
|
|
|
|
res.json({ ok: true, message: 'Device label updated successfully' });
|
|
} catch (err) {
|
|
res.status(500).json({ ok: false, error: err.message });
|
|
}
|
|
}
|
|
|
|
module.exports = updateLabelHandler;
|