[英]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.