【问题标题】:Loopback allowing all users to access something that only the owner should see环回允许所有用户访问只有所有者才能看到的内容
【发布时间】:2018-03-18 21:19:37
【问题描述】:

在我的环回应用程序中,我有两个模型:userthing

基本上thing属于user,只有所有者才能访问thing。这是我的thing.json 文件的样子:

{
  "name": "thing",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "user",
      "foreignKey": "userId",
      "primaryKey": "id"
    }
  },
  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$unauthenticated",
      "permission": "DENY"
    }
  ],
  "methods": {}
}

发生的情况是,如果我在允许某些角色之前像现在这样拒绝所有人,则不允许任何人访问或创建事物,但如果我删除该行,所有用户都可以访问所有事物。我错过了什么?我希望只有所有者能够访问他们自己的东西。

谢谢!

【问题讨论】:

  • 尝试启动您的服务器 DEBUG=loopback:security:* node . (linux & macos) 或 set DEBUG=loopback:security:* & node . (windows) 以查看环回如何决定谁可以访问。
  • 谢谢肯定会帮上大忙!但是,对于这种特殊情况,我不太确定如何解释这一点。似乎用户没有被识别为所有者?在 ACL 日志中,我知道 principalId 是$everyone,这就是我被拒绝的原因。但是我到底如何将当前用户设置为允许创建和查看自己的things的用户?
  • 你能发送你试图用来变异things的url吗? Loopback 通过查看您的 access_token 来解析用户(以及您是否是所有者)
  • 这是我用来获取things的API调用:axios.get('localhost:3002/challenges', {params: { access_token: user.id}})。所以基本上,localhost:3002/challenges?access_token="[MY TOKEN]"
  • 你没有指定你得到什么的 id。安东尼奥的回答是正确的。你想要axios.get('localhost:3002/challenges/' + TheIdOfTheChallengeIWant, {params: {access:token: user.id}})

标签: javascript acl loopbackjs loopback


【解决方案1】:

来自环回documentation

要限定 $owner,目标模型需要与 User 模型(或扩展 User 的模型)具有 belongsTo 关系,并且需要与目标模型实例的外键匹配的属性。 $owner 的检查仅针对路径上具有“:id”的远程方法执行,例如 GET /api/users/:id。

【讨论】:

  • 据我了解,这正是我在当前代码中所做的。如果没有,我错过了什么?我还查看了 BelongsTo 关系(在此处找到:loopback.io/doc/en/lb3/…),我没有看到遗漏了什么。
  • 你打电话给/api/users/:id/things还是/api/users/:id/things/:fk?属性model 的值应为User(大写)。
  • 这确实是我最初的问题,尽管还有一些问题,例如从不禁用 User 模型。但是当谈到我的模特之间的关系时,我有一个很大的误解,这是主要的。谢谢!
猜你喜欢
  • 2013-08-09
  • 2020-08-23
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多