作者自己的回答是正确的,但我会为将来使用它的人添加一些内容 - 您可以modelName
从req.options.model
使用蓝图时获得。
不幸的是,您不能使用this[modelName]
作为选项给您以小写字母开头的型号名称,因此首先您必须将首字母大写,例如 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')
}
})