2016-12-05 25 views
0

我希望所有对由Sails生成的API的所有HTTP GET请求都受到限制。那么,如何将过滤器应用于所有传入的API GET请求。如何自动将模型过滤器应用于Sails中的GET请求

更具体地说,我的大部分车型有一个名为publicityLevel的属性。这告诉模型是否公开。所以我希望我的所有模型都能为所有传入的GET请求自动应用过滤器(如publicityLevel: 'public')。

更先进,我想编写一些代码,这决定了用户是否可以看到具体型号或没有。所以如果用户是管理员,请不要应用此过滤器。如果用户不是管理员,请应用此过滤器。

回答

0

我有类似的问题,蓝图来解决,我解决了它。

如果我们谈论的蓝图:

当您使用蓝图你可以从req.options.modelmodelName。 我用它来检查用户是否属于与元素相同的组。

不幸的是你不能使用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') 
    } 
    }) 
+0

这是一个路由处理?这段代码去哪里? – AskYous

+0

哦。抱歉!这是政策。 –

相关问题