我的API很大,并且使用蓝图,因为它对于大多数操作确实很方便。它是多租户应用程序,因此每个元素都有groupID
字段。
我需要有策略,这将检查要编辑/删除的元素是否属于用户组。我已经在JWT策略注入的请求中有用户的groupID,但是,如何制定策略,以查看将检查适当的ID模型并将其与用户ID进行比较的策略呢?GroupID不能从请求中完成,因为Hacker可以使用他的JWT令牌,并将他的GroupID按要求,但无法访问他的元素。是否有可能,或者我必须每个模型创建单独的策略?
我找到了它。
使用蓝图时,您可以从req.options.model
获得modelName
。
不幸的是,您不能使用this[modelName]
作为选项从小字母开始的选项,因此首先必须使用例如case first字母。var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1);
然后您可以自由使用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')
}
})