Quiero tener 2 roles de acceso: administrador y superadministrador.
El superadministrador puede crear, leer, actualizar y eliminar publicaciones. El administrador puede leer, actualizar publicaciones.
Ya tengo los middlewares:
const verifyAdminStatus = (req, res, next) => { //pseudocode: if (user === 'admin') next(); } const verifySuperAdminStatus = (req, res, next) => { //pseudocode: if (user === 'superadmin') next(); }Para crear y eliminar funciona bien:
router.post("/api/posts", [verifyToken, verifySuperAdminStatus], createPost); router.delete("/api/posts/:id", [verifyToken, verifySuperAdminStatus], deletePost);Pero para actualizar y leer, no puedo poner ambos middlewares, porque ninguno de ellos tendrá acceso. ¿Cómo puedo implementar una solución en la que tanto los administradores como los superadministradores puedan actualizar y leer? ¿Necesito crear un nuevo middleware que verifique ambos?
puede usar una fábrica de middleware para tener solo un middleware que administre los diferentes casos de la siguiente manera:
const authMiddleware = (roles) => { return (req,res,next) => { roles.forEach(role => { if(["admin", "superadmin"].includes(role)) return next(); }) return res.status(403).json({ message: "Forbidden" }) } } router.post("/api/posts", [verifyToken, authMiddleware(["Admin"])], createPost); router.delete("/api/posts/:id", [verifyToken, authMiddleware(["SuperAdmin"]], deletePost); router.delete("/api/posts/another-endpoint", [verifyToken, authMiddleware(["SuperAdmin", "Admin"]], deletePost);El último punto de enlace se puede consumir para un rol de administrador o superadministrador.