Sailsjs.通用策略检查请求中的元素是否与用户组相同



我的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')
    }
  })

最新更新