2016-10-20 3 views
0

В моем 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); 

Эти конечные точки достигаются моей угловыми службы productData соответственно с помощью методов productData.updateReview(product) и productData.updateField(product).

Таким образом, в моей productData службе, я использую два ресурса:

One с URL /products/reviews/:id для метода updateReview, и один с URL /products/:id для метода updateField.

Я чувствую, что я не делаю разделения проблем должным образом.

Проблема возникает из-за того, что моя модель имеет поля, которые нужно обрабатывать по-разному. Но для меня имеет смысл иметь все операции CRUD для products в одной службе.

Что было бы более элегантным решением для этого?

ответ

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 
}; 
Смежные вопросы