Я пытаюсь найти способ передать право собственности на файл на Google Диске другому пользователю. Я могу поделиться файлом с другим пользователем, но не могу найти способ передать право собственности на файл. Кажется, есть решения для Документов, Таблиц и Презентаций Google, но не для обычных файлов, таких как .mp4
или .mov
.
Право собственности на файл имеет значение по нескольким причинам, одна из которых заключается в том, что файл засчитывается по квоте владельца файла.
Кажется, нет способа сделать это, но я нашел обходной путь. Допустим, A хочет передать право собственности на файл B.
- A предоставляет доступ к файлу B.
- B входит в систему и делает скопируйте файл, щелкнув его правой кнопкой мыши и выбрав «сделать копию».
- A или B теперь могут удалить исходный файл.
- Новый файл можно переименовать так, чтобы оно совпадало с именем исходного файла. К новому файлу также необходимо предоставить доступ A.
К сожалению, любые ссылки на старый файл не будут указывать на новый файл.
Невозможно передать право собственности на файл из учетной записи службы пользователю диска Google
При попытке передать право собственности я получаю следующую ошибку:
"домен": "глобальный", "причина": "invalidSharingRequest", "сообщение": "неверный запрос. Сообщение пользователя: " Вы не можете изменить владельца этого элемента. ""
Вот мой код:
использовать Google_Client; использовать Google_Service_Drive; использовать Google_Service_Drive_DriveFile; использовать Google_Service_Drive_Permission; общедоступную функцию uploadDocument () {$ FOLDER_ID = 'my_folder_ID_string'; $ client = новый Google_Client (); $ client-> setAuthConfig (base_path ('service_account_credentials.json')); $ client-> setScopes (массив ('https://www.googleapis.com/auth/drive')); $ service = новый Google_Service_Drive ($ client); $ fileMetadata = новый Google_Service_Drive_DriveFile (array ('name' => 'Test.pdf', 'parent' => [$ FOLDER_ID])); $ content = file_get_contents (public_path ('tmp/Test.pdf')); $ file = $ service-> files-> create ($ fileMetadata, array ('data' => $ content, 'mimeType' => 'application/pdf', 'uploadType' => 'multipart', 'fields' =>). 'я бы' )); //Передача права собственности $ newPermission = new Google_Service_Drive_Permission (); $ newPermission-> setRole ('владелец'); $ newPermission-> setType ('пользователь'); $ newPermission-> setEmailAddress ('[email protected] '); $ optParams = array ('transferOwnership' => 'true'); $ service-> permissions-> create ($ file-> id, $ newPermission, $ optParams);}
Папка успешно загружена на Google Диск в общую папку (владелец это ’email @ gmail. com ‘, служебная учетная запись — «editor»), однако владельцем загруженного файла является служебная учетная запись, а редактором — «[email protected]».
Вы не можете изменить владельца файла, расположенного на общем диске
Согласно документации:
Файлы на общем диске принадлежат общему диску, а не отдельные пользователи.
Следовательно, нет необходимости «отбирать» право собственности у учетной записи службы.
Вы можете заставить пользователей предоставлять любые другая роль, например органайзер
, который позволит пользователю переместить файл с общего диска и, таким образом, стать владельцем файла.
UPDATE
Если файлы загружаются учетной записью службы в общую папку на Диске пользователя, а не на общий Диск, ситуация иная.
В частности:
- Для пользователей GSuite передача права собственности за пределы домена не разрешена и приведет к ошибке
Право собственности может быть передано только другому пользователю в той же организации, что и текущий владелец.
. - Учетная запись службы не считается пользователем домена и поэтому на нее распространяются те же ограничения.
- Для пользователей-потребителей передача права собственности из учетной записи службы пользователю разрешена, но ограничена: Только для документов Google mimeType можно изменить владельца.
- В связи с указанными выше ограничениями передачи права собственности из службы учетной записи пользователя, лучше избежать проблемы, используя олицетворение.
- Олицетворение означает, что учетная запись службы действует от имени пользователя (например, вы), а когда он загружает файлы на ваш Диск, это эквивалентно тому, когда вы загружаете файлы самостоятельно — передача права собственности не требуется, никакого явного совместного использования папки с учетной записью службы не требуется.
- Чтобы настроить олицетворение, вам необходимо
-
Включить делегирование домена для конкретной учетной записи службы в консоли GCP.
-
Авторизуйте все области, необходимые для учетной записи службы, в консоли администратора, выбрав
Безопасность> Элементы управления API> Делегирование на уровне домена
. -
Измените свой код, добавив строку
$ client-> setSubject ($ EmailOfUserToImpersonate);
- Имейте в виду, что, к сожалению, делегирование всего домена возможно только для доменов, то есть учетных записей GSuite.
- Для учетных записей потребителей (gmail) это невозможно передать право собственности на mimeType, не принадлежащий Google, из учетной записи службы пользователю.
- В качестве временного решения пользователь может сделать копию файла, загруженного учетная запись службы — впоследствии учетная запись службы может удалить исходный файл.