我们有一个应用程序有两种类型的用户。根据用户登录的方式,我们希望他们能够访问应用程序的不同部分。
我们做每个路由实现的安全部分吗?问题是我们将在请求之间有一些重复的逻辑。我们可以将它转移到辅助函数,但我们仍然需要记住调用它。
我们做一个全局app.all()路由处理程序的安全部分吗?问题是,我们必须检查每个路由,并根据众多规则做不同的逻辑。至少所有的代码都在一个地方,但是…所有的代码在一个地方。
解决方法
让它每路由通常适用于我。这是我通常做的:
function requireRole(role) { return function(req,res,next) { if(req.session.user && req.session.user.role === role) next(); else res.send(403); } } app.get("/foo",foo.index); app.get("/foo/:id",requireRole("user"),foo.show); app.post("/foo",requireRole("admin"),foo.create); // All bars are protected app.all("/foo/bar",requireRole("admin"));