Могу ли я отключить функцию `include` фильтра в loopbackjs API? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть несколько вопросов, связанных с платформой IBM loopback.js (node.js)

Вопросы

1) Имеет ли loopback js возможность ограничивать использование include фильтров в API для определенных моделей и ролей?

2) Можно ли ограничить возможность получения не связанных предметов для текущего пользователя с помощью include api в loopback js?

3) Может, кто-то знает, существует ли модуль для этого или связующего ПО? Для МВт это нужно с точки зрения безопасности. В настоящее время в некоторых случаях пользователь может получать конфиденциальные данные с помощью API словарей.

Примеры

Например: У меня есть объект USER с ROLE admin и объект USER с ROLE editor. Они связали собственные проекты и доступ к ним. Я хочу ограничить возможность редактора использовать GET ?filter=include:[projects] и разрешить его использовать администратору. Как я могу это сделать?

Например: У меня есть две сущности USER с ROLE editor. Они связали собственные проекты и доступ к ним. Они не могут иметь доступ к проектам друг друга. Пользователи могут получить список пользователей по GET api/users, и это нормально, потому что это словарь. Но когда пользователь звонит GET api/users?filter=include:[projects], любой пользователь имеет доступ к проектам других пользователей. Как я могу ограничить или отключить эту функцию?

1 Ответ

0 голосов
/ 06 ноября 2018

Может ли loopback js ограничивать использование, включать фильтры в API для определенных моделей и ролей?

Вы можете отключить включение связанных моделей на основе отношений. Например, встроенное отношение Пользователь имеет много экземпляров AccessToken отключает включение маркеров доступа при запросах пользователей. Перекрестная публикация примера конфигурации из наших документов:

{
  "name": "CustomUser",
  "base": "User",
  // ...
  "relations": {
    "accessTokens": {
      "type": "hasMany",
      "model": "AccessToken",
      "foreignKey": "userId",
      "options": {
        "disableInclude": true // <<< THIS IS THE CONFIG FLAG TO SET
      }
    }
  },
  // ...
}

AFAIK, нет встроенного API для отключения фильтров включения для определенных ролей.

Эту функцию можно реализовать с помощью ловушки beforeRemote и / или ловушки операций access. Идея состоит в том, чтобы реализовать хук, который будет проверять роль текущего пользователя и изменять аргумент filter для удаления запрещенных включений.

Еще одна опция, которая приходит мне в голову: отключить включение связанных моделей на уровне отношений для всех пользователей. Предоставьте пользовательскую реализацию функции find, которая будет извлекать связанные модели вручную и только тогда, когда авторизованный пользователь имеет разрешения для этого:

  1. Отключить встроенный метод find, см. Отключение удаленного метода
  2. Укажите свой собственный удаленный метод, который отображается в GET /api/users, см. Как добавить удаленный метод в модель

Могу ли я ограничить возможность получения не связанных предметов для текущего пользователя, включив api в loopback js?

AFAIK, разрешения LoopBack не работают на уровне filter.include.

...