2015-12-28 29 views
1

在此应用程序中,具有编辑或销毁帖子权限的唯一用户应该是创建帖子的用户。具有MEAN堆栈的编辑/更新API端点的访问控制/授权

我有一个路由来验证用户给他们一个令牌。我也有一个验证令牌的途径:

apiRouter.use(function(req, res, next) { 

    var token = req.body.token || req.query.token || req.headers['x-access-token']; 

    if (token) { 
    jwt.verify(token, secret, function(err, decoded) { 
     if (err) { 
     res.status(403).send({ 
      success: false, 
      message: 'Failed to authenticate token.' 
     }); 
     } else { 
     req.decoded = decoded; 
     next(); 
     } 
    }); 
    } else { 
    res.status(403).send({ 
     success: false, 
     message: 'No token provided.' 
    }); 
    } 
}); 

确保只有合适的用户才能使用令牌编辑和销毁帖子的标准方法是什么?

apiRouter.route('/posts/:post_id') 

    .put(function(req, res) { 
     Post.findById(req.params.post_id, function(err, post) { 
      if (err) res.send(err); 

      if (req.body.title) post.title = req.body.title; 
      if (req.body.body) post.body = req.body.body; 
      if (req.body.author) post.author = req.body.author; 

      post.save(function(err) { 
       if (err) res.send(err); 

       // return a message 
       res.json({ message: 'Post updated!' }); 
      }); 
     }); 
    }) 

    .delete [...] 

回答

0

你可以把所有的逻辑检查用户是否是验证用户是否在中间件和可能利用RBAC(基于角色的访问控制)的,定义用户的权限/角色。

+0

我该如何去做这件事?什么是rbac? – jro

+0

对于任何与用户相关的路由,您首先需要对用户进行身份验证(通常通过令牌)。一旦你找出了用户是哪个特定请求的,你可以将这些信息附加到他们的会话中(如request.session = user)。 '用户'对象可以包含更多关于其角色的信息(通过数据库查找等),然后在中间件中确定用户是否获得路由授权。有关更多示例,请参阅https://github.com/seeden/rbac – SKY