【问题标题】:Looback: configure acl and relations to list all objects belonging to logged usedLoopback:配置 acl 和关系以列出属于已记录使用的所有对象
【发布时间】:2017-11-02 09:14:00
【问题描述】:

我正在尝试设置一个环回项目,但遇到了一个我无法弄清楚的基本问题。

所以我基本上定义了一个自定义用户模型,其中包含以下关系和 acl:

"relations": {
   ...
    "projects": {
      "type": "hasMany",
      "model": "project",
      "foreignKey": "userId"
    }
}
"acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
]

还有一个用属性定义的“项目”模型:

"relations": {
    "user": {
      "type": "belongsTo",
      "model": "user",
      "foreignKey": "userId"
    }
},
"acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "create"
    }
]

首先,令我惊讶的是,在登录时提交 POST /projects 时,我希望外键会自动放入对象中,但看起来这必须手动完成。我想这很正常,我想我对框架的期望太高了。

话虽如此,我一直在努力列出登录用户拥有的所有项目。使用 {id} 执行 GET /projects/{id} 是属于已登录用户的对象。当 {id} 指向不属于登录用户的对象时,我得到了预期的 401。

但是,我期待运行 /projects 会返回登录用户拥有的所有项目,但会向我抛出 401。

我错过了什么?我的 ACL 设置错误吗?我使用了错误的方法吗?我尝试放置一个像 '{"where":{"userId":"myId"}}' 这样的过滤器,但没有运气。我还尝试了其他端点 /user/myId/projects,但运气不佳。

谢谢

【问题讨论】:

  • 您能否检查您的model-config.json 以确保内置的User 模型不是公开的?您可能正在路由到它而不是您的自定义 user 模型。
  • @Ivan Schwarz 感谢您的回复,用户未定义为公开。这是它的 def "User": { "dataSource": "db", "public": false, "options": { "realmRequired": true, "realmDelimiter": ":" } }
  • 1) 根据docs,仅对路径上有:id 的远程方法执行$owner 检查,例如GET /projects/:id。 2) GET /user/:id/projects 返回 401,因为它遵循您的 user 模型上的 ACL,并且这些不允许列出项目。您正在寻找允许 __get__projects 属性。

标签: javascript node.js foreign-keys acl loopback


【解决方案1】:

所以我想我只是弄错了环回,GET /projects 不是正确的调用,而是 GET /users/{userId}/projects。 ACL 和关系似乎设置正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多