Мое веб-приложение представляет собой настольную виртуальную трехмерную игру без внутреннего сервера ... вместо этого оно использует Google Drive для хранения пользовательских данных и изображений. У меня есть конкретный c вопрос, но я опишу свою ситуацию более подробно, если есть решение где-то выше уровня моего вопроса.
Вариант использования
- Пользователь A, Game Master (GM), использует приложение для загрузки изображения карты и некоторых изображений некоторых монстров. Приложение загружает изображения в структуру папок, созданную на Google Диске пользователя А., и приложение помечает их как доступные для чтения по ссылке.
- После настройки пользователем приложения А приложение отображает виртуальную настольную поверхность в трехмерном пространстве. содержащий карту с несколькими монстрами на нем. JSON данные, описывающие столешницу, также хранятся в Google Диске, и приложение помечает их как читаемые по ссылке.
- Пользователь A делит URL-адрес с пользователем B, игроком. Ссылка на мое приложение, но содержит идентификатор файла Google Drive для файла JSON на диске пользователя А., описывающего настольную поверхность.
- Пользователь Б обращается к ссылке. Приложение загружается, использует идентификатор для чтения файла JSON с диска пользователя А, а затем визуализирует настольную панель, загружая изображения с диска пользователя А. по мере необходимости.
Проблема
Область Google Drive drive.files
oAuth достаточна для выполнения шагов 1-3 варианта использования - приложение может создавать и читать файлы Google Диска для пользователя A.
Однако при использовании только области действия drive.files
выполнение шага 4 не представляется возможным.
- Пользователь B предоставил приложению
drive.files
доступ к своему диску. - файлы были созданы приложением (в шагах 1-2)
- Пользователь B имеет доступ на чтение к файлам (предоставляется в шагах 1-2)
- Google Диск не разрешает приложению доступ файлы, потому что пользователь B не предоставил приложению разрешение на доступ к файлам.
Документация для drive.files
описывает его как "доступ к файлам для файлов, созданных или открытых приложением. Файл авторизация предоставляется для каждого пользователя и отменяется, когда пользователь деавторизует приложение. " Тем не менее, это не является строго правдой, потому что Drive, кажется, не записывает, был ли файл создан приложением. Кажется, что вместо этого, когда приложение создает файлы, доступ к приложению неявным образом предоставляется текущему пользователю для этих файлов, а затем тот факт, что файл был создан приложением, забывается.
Текущий обходной путь для приложения также требуется drive.readonly
oAuth объем. Это необоснованный уровень доступа, и я знаю многих пользователей, которые (вполне разумно) решили, что не хотят предоставлять моему приложению доступ только для чтения ко всему диску. Это также «ограниченная» область действия oAuth, но я прошел процесс проверки приложения в Google.
Вопрос
Возможно ли сделать мое приложение предоставить пользователю B доступ на чтение к файлам, не используя oAuth-области ограниченного уровня, не требуя слишком много работы от пользователя B и оставаясь при этом чисто клиентской стороной? Если да, то как?
Проблема c Решения
Использование drive.readonly
oAuth scope работает, но нецелесообразно, как обсуждалось выше.
Я считаю, что для моего приложения можно создать интеграцию Drive, которая позволила бы пользователю щелкнуть правой кнопкой мыши файл и «Открыть с помощью» моего приложения, что предоставило бы приложению доступ к файлу. Тем не менее,
- Имеется множество файлов - файл JSON, описывающий столешницу, отдельные изображения для каждой карты и существа на столешнице, а также другие файлы. Кроме того, новые изображения могут быть добавлены в настольную игру.
- Пользователь B является игроком и не имеет (и не должен иметь) разрешения просматривать файлы GM на диске GUI, чтобы щелкнуть их правой кнопкой мыши и «Открыть с помощью» приложения. Они не должны видеть монстров или карты, которые еще не были добавлены к столу. Для этого приложение предоставляет доступ для чтения по ссылке для файлов, но не для каталогов, содержащих эти файлы.
Было бы возможно иметь собственный сервер, который обслуживает содержимое с диска, но я пытаюсь сохранить приложение чисто на стороне клиента.
Технология
В случае необходимости, приложение написано в Javascript Typescript) и вызовы Drive API выполняются с помощью Javascript Google Drive REST API.