回送:隐藏某些用户角色的某些属性

时间:2018-12-09 14:18:51

标签: loopbackjs acl

有一个这样的模型

{
  name,
  budget
}

还有一个角色reviewer

是否可以为budget隐藏reviewer字段?

1 个答案:

答案 0 :(得分:2)

您可以为该模型使用远程挂钩。例如,您的代码可能如下所示:

MyModel.afterRemote('**', function(ctx, modelInstance, next) {
  if (ctx.result) {
    if (checkIfUserHasRole('reviewer')) { // <-- you need to implement this function
      // if you are going to return a list of items, eg. from Model.find(...) 
      if (Array.isArray(modelInstance)) { 
        ctx.result = ctx.result.map(item => {
          return modifyYourProperties(item); // <-- you need to implement this function
        }
      }
      // if you are going to return a single item, eg. from Model.findById(...)
      else {
        ctx.result = modifyYourProperties(ctx.result); // <-- as above...
        }

      });
    }
  }
  next();
}

现在,在每次对模型的远程调用中,您都可以修改结果。它们已经处理,但尚未返回给请求者,因此您可以在此处隐藏所需的属性。

当然,您需要实现方法checkIfUserHasRolemodifyYourProperties来完成要实现的目标。您可以在此处阅读有关远程挂钩的更多信息:https://loopback.io/doc/en/lb3/Remote-hooks.html