与loopback.io的ACL问题

时间:2016-09-07 14:43:04

标签: node.js loopbackjs

我目前正在评估loopback.io以开发新项目的API部分,而且我在设置正确的ACL条目时遇到问题。

我希望获得的是一个auth令牌,GET端点应该只返回用户拥有的对象。例如,对/ Shows?access_token = xxxxxx的请求应仅返回用户拥有的对象。

下面是我的shows.json文件,我的用户模型名为Podcaster。任何帮助将不胜感激。

{
  "name": "Show",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "title": {
      "type": "string",
      "required": true
    },
    "description": {
      "type": "string"
    }
  },
  "validations": [],
  "relations": {
    "episodes": {
      "type": "hasMany",
      "model": "Episode",
      "foreignKey": ""
    },
    "podcaster": {
      "type": "belongsTo",
      "model": "Podcaster",
      "foreignKey": ""
    }
  },
  "acls": [
    {
      "accessType": "WRITE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "create"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    }
  ],
  "methods": {}
}

1 个答案:

答案 0 :(得分:1)

它与ACL无关。

您想要更改方法的业务逻辑。因此,最佳做法是创建一种新方法,以获取当前用户拥有的节目。

如果您想使用当前的owner ACl,则需要在usershow之间创建关系,并在ownerId中设置show模型。

  {
      "name": "Show",
      "base": "PersistedModel",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "title": {
          "type": "string",
          "required": true
        },
        "description": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
        "ownerId": {
          "type": "object"
        }

      },
      "validations": [],
      "relations": {
        "owner": {
          "type": "belongsTo",
          "model": "user",
          "foreignKey": "ownerId"
        },
....