AppSync GraphQL Подписка на групповые данные - PullRequest
0 голосов
/ 10 мая 2018

Я реализовал слой авторизации AWS Lambda для моих запросов и мутаций GraphQL, так что пользователь может только читать / записывать данные в конкретный элемент таблицы DynamoDB, если он является членом группы, к которой принадлежит элемент, реализованной с использованием ключ раздела groupId и ключ сортировки itemId. Таким образом, таблица может иметь много элементов с общим идентификатором группы, а также много разных идентификаторов группы. Это все работает как ожидалось.

Теперь я хотел бы иметь возможность расширить эту групповую авторизацию для моих подписок на GraphQL в реальном времени. Я наблюдаю, что непараметрические подписки транслируются всем пользователям. Мне нужно решение, которое ограничивает события подписки, чтобы все члены группы и только члены группы получали событие подписки для мутаций в табличных данных, содержащих соответствующий ключ groupID. Пользователь, являющийся членом многих групп, будет получать события подписки для всех групп, членами которых он является.

Группы и члены группы являются динамическими, с созданием групп и добавлением членов с помощью бизнес-логики приложения.

Я наблюдаю множество методов авторизации AWS, статических и динамических. Я видел примеры параметризованных подписок и распознавателей подписок, которые нацелены на подписку только на один элемент, но я не вижу ничего, что соответствовало бы моей конкретной потребности в «нескольких группах».

Я использую AWS Amplify API для клиентских вызовов GraphQL. Я наблюдаю, что Apollo имеет подписку ToMore (), которая может быть полезна для этого сценария, но в настоящее время я предпочитаю избегать переделок, необходимых для меня, чтобы мой пользовательский интерфейс соответствовал шаблону рендеринга реквизитов Аполлона 2.

Есть мысли?

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете сделать следующее, чтобы включить этот вариант использования с AppSync.

  1. Добавьте аргумент «groupId» в подписку.
  2. Прикрепите решатель подписки к вашей подписке.
  3. В шаблоне сопоставления запросов распознавателя подписок запросите таблицу User, чтобы определить, для каких групп разрешен вызывающий абонент.
  4. В шаблоне отображения ответов подписки сверяйте аргумент подписки «groupId» со списком групп, полученных из запроса таблицы пользователя. Отклонить запрос, если вызывающий абонент пытается подписаться на группу, для которой он не авторизован.
  5. Убедитесь, что ваша мутация возвращает поле groupId, чтобы подписки AppSync могли правильно направлять ваши сообщения.

После этого клиент может подписаться несколько раз, по одному разу для каждой группы, для которой он хочет получать уведомления.

Вот документация по авторизации подписки, которая содержит пример, аналогичный вашему: https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html#real-time-data

...