[英]SailsJS. Generic policy which check if groupID of element in request is the same as user's group
我有大量的API,並且正在使用藍圖,因為它對於大多數操作而言確實很方便。 它是多租戶應用程序,因此每個元素都有groupID
字段。
我需要有一個策略來檢查要編輯/刪除的元素是否屬於用戶組。 我的請求已經由JWT策略注入了用戶的groupID,但是如何使策略成為通用策略,該策略將檢查ID的適當模型並將其與用戶ID進行比較? 黑客無法使用來自請求的groupID來完成此操作,因為黑客可以使用其JWT令牌並將其groupID放入請求中,但不能訪問其元素。 是否可以,或者我必須為每個模型創建單獨的策略?
我找到了。
使用藍圖時,可以從req.options.model
獲取modelName
。
不幸的是,您不能使用this[modelName]
因為選項為您提供以小寫字母開頭的模型名稱,因此首先您必須以大寫首字母加上例如var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1);
然后您可以隨意使用this[modelName].whateverYouNeed
您需要this[modelName].whateverYouNeed
我將其用於一般策略,以允許用戶僅編輯自己的組元素。
var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1)
var elementID = null
if (req.params.id) { // To handle DELETE, PUT
elementID = req.params.id
}
if (req.body.id) { // To handle POST
elementID = req.body.id
}
this[modelName].findOne({
id: elementID
}).exec(function(err, contextElement) {
if(err) {
return res.serverError(err)
}
if(contextElement.group=== req.user.group.id) {
sails.log('accessing own: ' + modelName)
return next()
}
else {
return res.forbidden('Tried to access not owned object')
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.