在我的MEAN应用程序中,我有一个这样的产品模型:
product: {
field: //some string value//,
reviews: //an array of review objects//
}
现在,我将对保存field
和reviews
应用不同的限制,因此我的API端点将如下所示:
/* specific route for updating reviews */
router.put('/products/reviews/:id', checkRightsToUpdateReviews, updateProductReviews);
/* specific route for updating field */
router.put('/products/:id', checkRightsToUpdateField, updateProductField);
我的Angular服务productData
分别通过方法productData.updateReview(product)
和productData.updateField(product)
达到了这些端点。
因此,在我的productData
服务中,我使用了两种资源:
/products/reviews/:id
方法的网址为updateReview
,/products/:id
方法的网址为updateField
。
我觉得我没有正确地分离关注点。
问题源于我的模型具有必须以不同方式处理的字段的事实。但是对于我来说,在一个服务中对products
进行所有CRUD操作是有意义的。
对于这个显然更优雅的解决方案是什么?
答案 0 :(得分:0)
我会使用一个授权中间件来检查这两种情况。
router.put('/products/:id', checkUpdateRights, updateProduct);
function checkUpdateRights(req, res, next){
if(req.body.reviews && !hasReviewRights(req)){ // check only if reviews exists in body
res.status(401).send({ error: "Unauthorized to update product reviews" });
}
if(!hasUpdateRights(req)){ // for other fields
res.status(401).send({ error: "Unauthorized to update product" });
}
else{
return next();
}
};
function hasReviewRights(req){
// return true or false
};
function hasUpdateRights(req){
// return true or false
};