簡體   English   中英

SailsJS。 檢查請求中元素的groupID是否與用戶組相同的通用策略

[英]SailsJS. Generic policy which check if groupID of element in request is the same as user's group

我有大量的API,並且正在使用藍圖,因為它對於大多數操作而言確實很方便。 它是多租戶應用程序,因此每個元素都有groupID字段。

我需要有一個策略來檢查要編輯/刪除的元素是否屬於用戶組。 我的請求已經由JWT策略注入了用戶的groupID,但是如何使策略成為通用策略,該策略將檢查ID的適當模型並將其與用戶ID進行比較? 黑客無法使用來自請求的groupID來完成此操作,因為黑客可以使用其JWT令牌並將其groupID放入請求中,但不能訪問其元素。 是否可以,或者我必須為每個模型創建單獨的策略?

我找到了。

使用藍圖時,可以從req.options.model獲取modelName

不幸的是,您不能使用this[modelName]因為選項為您提供以小寫字母開頭的模型名稱,因此首先您必須以大寫首字母加上例如var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1);

然后您可以隨意使用this[modelName].whateverYouNeed您需要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')
    }
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM