我希望所有对Sails生成的API的所有HTTP GET请求都受到限制。那么如何将过滤器应用于所有传入的API GET请求。
更具体地说,我的大多数模型都有一个名为publicityLevel
的属性。这表明模型是否公开。所以我希望我的所有模型都自动为所有传入的GET请求应用过滤器(如publicityLevel: 'public'
)。
更高级,我想编写一些代码来决定用户是否可以看到特定的模型。因此,如果用户是管理员,请不要应用此过滤器。如果用户不是管理员,请应用此过滤器。
答案 0 :(得分:0)
我有类似的问题要用蓝图解决,我解决了。
如果我们谈论BLUEPRINTS:
使用蓝图时,您可以从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')
}
})