Looback: настройте acl и отношения, чтобы перечислить все объекты, принадлежащие зарегистрированному

1

Я пытаюсь настроить loopback-проект, и у меня возникает основная проблема, которую я не могу понять.

Итак, у меня есть обычная пользовательская модель, определенная со следующими отношениями и acls:

"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/проекты во время входа в систему, я ожидал, что внешний ключ будет автоматически помещен в объект, но похоже, что это нужно делать вручную. Я полагаю, что это нормально, я думаю, я ожидал слишком многого из рамки.

При этом я изо всех сил старался перечислить все проекты, принадлежащие зарегистрированному пользователю. Выполнение GET/projects/{id} с {id} является объектом, принадлежащим зарегистрированному пользователю. И когда {id} указывает на объект, НЕ принадлежащий зарегистрированному пользователю, я получаю, как и ожидалось, 401.

Но потом я ожидал, что запуск/проекты вернут все проекты, принадлежащие зарегистрированному пользователю, но вместо этого выкинет 401 на мое лицо.

Что мне не хватает? Является ли моя настройка ACL неправильной? Использую ли я неправильный метод? Я попробовал поместить фильтр как "{" где ": {" userId ":" myId "}}, но не повезло. Я также попробовал другие endpoint/user/myId/projects, не повезло.

Спасибо

  • 0
    Можете ли вы проверить свой model-config.json чтобы убедиться, что встроенная модель User не является общедоступной? Вполне возможно, что вы используете его вместо своей user модели.
  • 0
    @Ivan Schwarz Спасибо за ваш ответ. Пользователь не определен как общедоступный. Вот его определение "Пользователь": {"dataSource": "db", "public": false, "options": {"realmRequired": true, "realmDelimiter": ":"}}
Показать ещё 1 комментарий
Теги:
foreign-keys
acl
loopback

1 ответ

0
Лучший ответ

Поэтому я предполагаю, что я просто ошибочно ошибался, GET/projects не был правильным вызовом, а вместо этого GET/users/{userId}/projects. ACL и отношения кажутся правильными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню