表示多角色中间件



我想要两个访问角色:admin和superadmin。

超级管理员可以创建、读取、更新和删除帖子。管理员可以阅读、更新帖子。

我已经有了中间件:

const verifyAdminStatus = (req, res, next) => {
//pseudocode: if (user === 'admin') next();
}
const verifySuperAdminStatus = (req, res, next) => {
//pseudocode: if (user === 'superadmin') next();
}

对于创建和删除,它运行良好:

router.post("/api/posts", [verifyToken, verifySuperAdminStatus], createPost); 
router.delete("/api/posts/:id", [verifyToken, verifySuperAdminStatus], deletePost); 

但对于更新和阅读,我不能同时放两个中间件,因为它们中的任何一个都无法访问。如何实现管理员和超级管理员都可以更新和读取的解决方案。我需要创建一个新的中间件来检查两者吗?

您可以使用中间件工厂来只有一个中间件来管理不同的情况,如下所示:

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); 

最后一个端点可以用于管理员或超级管理员角色。

最新更新