Node.js 如何使用环回保护不同角色的属性

Node.js 如何使用环回保护不同角色的属性,node.js,loopbackjs,Node.js,Loopbackjs,我只是想知道如何将属性访问权限限制为仅$owner角色。例如,在我的例子中,我有一个笑话,其中有一个作者。作者以用户为基础。我想让其他“作者”/用户看到是谁创造了这个笑话,但他们不应该能够看到作者的电子邮件,只有当作者是笑话本身的$owner时,才可以显示他们的电子邮件,只是为了这个案例 查看内置用户模型,您可以看到他们使用隐藏功能来隐藏密码,但将其用于电子邮件也会隐藏$owner的电子邮件,这不是我想要的 如果有什么不清楚,请告诉我 提前感谢您可以创建自己的角色解析程序。有关示例,请参见。确定

我只是想知道如何将属性访问权限限制为仅$owner角色。例如,在我的例子中,我有一个笑话,其中有一个作者。作者以用户为基础。我想让其他“作者”/用户看到是谁创造了这个笑话,但他们不应该能够看到作者的电子邮件,只有当作者是笑话本身的$owner时,才可以显示他们的电子邮件,只是为了这个案例

查看内置用户模型,您可以看到他们使用隐藏功能来隐藏密码,但将其用于电子邮件也会隐藏$owner的电子邮件,这不是我想要的

如果有什么不清楚,请告诉我


提前感谢

您可以创建自己的角色解析程序。有关示例,请参见。确定用户后,只需添加您自己的逻辑。

注册并检查当前用户是否为当前用户


注意:覆盖所有返回笑话的端点可能有点复杂。但是还有其他方法吗?

要修改输出/结果,您可以使用afterRemote挂钩,如下所示。输出/结果存储在中

当调用类似于
GET时,“findById”钩住GET请求http://myModel/id
。如果请求中未包含id,请使用“查找”,例如
GEThttp://myModel
。请注意,在“find”的情况下,返回的实例(笑话)通常不仅仅是一个,而是在一个对象数组中

Joke.afterRemote('findById', function(ctx, joke, next) {
  //your code
});
  • 获取当前登录用户的id:
    var currentUser=context.req.accessToken.userId
  • 将当前登录用户的用户id与所有者的用户id进行比较。如果两者不相同(即
    如果(!(currentUser==crook.userId))
    ,则:
  • 在调用next()之前,请从返回的实例中删除电子邮件属性。因为有时有些方法不起作用,这里有一些:

    • 删除ctx.result.email
    • ctx.result.email=''
    • 循环遍历属性并将它们传输到新的变量(电子邮件除外),然后将该新变量保存为结果:
      ctx.result=newVar

  • 接受,因为这也是我目前选择的解决方案。我对“受保护”的财产提出了请求。看,它不应该是远程的吗?因为我们正在删除结果的属性。
    Joke.afterRemote('findById', function(ctx, joke, next) {
      //your code
    });