Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | const Membership = require('../models/Membership');
/**
* Vérifie que l'utilisateur authentifié est membre de l'organisation.
* À utiliser APRÈS authenticateToken (req.user doit être défini).
* L'organizationId est lu dans req.params.organizationId (ou req.params.id).
*/
async function requireOrgMember(req, res, next) {
try {
const organizationId = req.params.organizationId || req.params.id;
if (!organizationId) {
return res.status(400).json({ success: false, message: 'organizationId required' });
}
const membership = await Membership.findOne({ userId: req.user._id, organizationId });
if (!membership) {
return res.status(403).json({ success: false, message: 'Access denied to this organization' });
}
req.membershipRole = membership.role;
next();
} catch (error) {
console.error('[requireOrgMember] Error:', error.message);
res.status(500).json({ success: false, message: 'Error checking organization membership' });
}
}
module.exports = { requireOrgMember };
|