Перейти к основному содержимому
Как работает SDK

Эта страница ещё не переведена — показана английская версия.

Кто принимает решения

Авторитетность — это абстракция, а не две сборки SDK. Отдельных SDK для клиента и для сервера нет. SDK один, а что разрешено конкретному вызову, решает актор, который его делает.

Мастер-клиент — не клиент и не сервер

Возьмём машину игрока (player). Она сама создаёт комнату (room) и сама её ведёт — это и есть мастер-клиент. У неё есть интерфейсы room-owner и ничего сверх того. Это не сервер: всего, что может сервер, она не умеет. Но и обычным клиентом её не назовёшь.

Выделенный сервер устроен так же, только с другой стороны: это тот же клиент без рендеринга, и отдельный SDK ему не нужен. Разница между ними в доверии, а не в устройстве, и доверие передаётся через выданные права (grant).

Интерфейсы зависят от актора, а не от стороны

Модуль не делится на «клиентский API» и «серверный API». Он показывает, что может room-owner, что может entry-validator, что может seller. Страницы модулей группируют свои интерфейсы так же — по акторам.

Роль — это и право, и классификация

Роль (role) определяет, что может актор, и ею же вы указываете, кому что-то адресовано. Второй оси рядом с ней — тегов или меток — нет.

Код спрашивает об этом через whoami. В ответ он получает актора и интерфейсы, которые этот актор открывает прямо сейчас, а не статический список, зашитый в бинарник при сборке.

Где выполняется код и от имени какого актора — разные вопросы

ВопросОтветы
Где выполняется этот код?облачная функция · игровой клиент · хост: мастер-клиент или выделенный сервер
Какой интерфейс актора у него есть?player · room-owner · entry-validator · seller · moderator · backend-service · …

Если разложить их в таблицу, видно, что оси независимы и любая клетка достижима:

облачная функцияигровой клиентхост комнатыадмин-панель
player✓✓✓—
room-owner✓✓ — машина самого игрока, которая хостит комнату✓—
backend-service✓—✓✓

Выделенная клетка — это код, который работает на клиенте и делает работу сервера. У этого случая есть имя — room-owner, и это такие же выданные права, как любые другие.

Допустима любая комбинация. Облачная функция не получает привилегий автоматически, а клиент автоматически не ограничен: права определяются тем, что выдано, а выдача объявляется явно.

Отзыв роли работает без перевыпуска учётных данных

Учётные данные (credential) указывают только на учётную запись. Списка ролей в них нет. Роли определяются на сервере при каждом запросе, так что доказательства собственных разрешений у клиента никогда не бывает, и после отзыва ему нечего продолжать предъявлять.

Поэтому отзыв роли вступает в силу без перевыпуска учётных данных. См. раздел Что даёт выдача роли.

Отзыв срабатывает не мгновенно

Отзыв роли становится заметен не позже, чем истечёт объявленный допустимый срок устаревания кэша прав. Мгновенного эффекта платформа не обещает.

Кто принимает решения — объявляется, а не угадывается

  • Тип комнаты объявляет свой режим авторитетности (authority mode), и значения по умолчанию здесь нет. Тик выполняет либо наша симуляция, либо внешний авторитетный источник (external authority) — игровой сервер студии или клиент игрока в роли мастер-клиента. Подробнее — в разделе Кто выполняет тик.
  • Насколько доверять внешнему авторитетному источнику в том, чем закончился матч, — отдельное объявление на типе комнаты: принимать его результат, проверять его хуком или не принимать вовсе. И снова без значения по умолчанию.
  • Какие учётные данные соответствуют какой роли и что такое ключ хоста (host key), описано на странице Access & Roles.