Права доступа к файлу Google Drive API (групповой диск) в php кому-либо или конкретному домену - PullRequest
0 голосов
/ 12 октября 2018

В Google API Explorer Я попытался указать правильный идентификатор файла в drive.permissions.create.Я установил для SupportTeamDrives значение true и тело запроса с ролью: reader и type: anybody.Это просто дает мне ошибку:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidLinkVisibility",
    "message": "Bad Request. User message: \"\""
   }
  ],
  "code": 400,
  "message": "Bad Request. User message: \"\""
 }
}

То же самое происходит в моем PHP-коде.Вот как можно ближе, что выглядит правильно для меня:

...
$userPermission     = new Google_Service_Drive_Permission( array(
                'type'          => 'anyone',
                'role'          => 'reader',
            ));
            $service->permissions->create( $imageId, $userPermission, array(
                'supportsTeamDrives'    => true,
            ));
...

Я не могу найти ничего об ошибке:

invalidLinkVisibility

Что мне нужно сделать, так это временно установить разрешение для 20-50 файлов в папке на «public» (т. Е. Любой, у кого есть ссылка, может его увидеть), потому что я отправляю webContentLink (или webViewLink, у меня нет)Я не понял, какой из них мне нужно использовать) в другой API, чтобы загрузить туда изображения.Как только это будет сделано, я хотел бы удалить публичный доступ.Один из вариантов - установить для публичного доступа разрешение (с рекурсивным публичным доступом) на папку.Я просто не могу понять, как я могу изменить (или, скорее, добавить) права доступа к файлу в Google Drive API в PHP.

Альтернативой этому будет наличие некоторыхспособ получить изображение через URL с включенным токеном, например,

$source     = $files.$image1;
$context    = stream_context_create( array(
    'https' => array(
        'header'  => 'Authorization: Bearer '. $token
    )
) );
$image = file_get_contents( $source, false, $context );

, где $ token является токеном аутентификации для аутентификации службы, $ files равен https://drive.google.com/a/file/d/ и $ image1 являетсяидентификатор файла.Конечно, пытаясь это сделать, я должен сначала войти в свою учетную запись Google, которая не будет работать, так как у меня будет другой API, вызывающий эти ссылки и размещающий контент в другой службе.Есть ли способ сделать эту работу?Таким образом, мне не придется беспокоиться о правах доступа к файлам (назад-вперед).

1 Ответ

0 голосов
/ 11 августа 2019

сначала вам нужно удалить старый объект разрешений, этот объект обычно будет иметь этот начальный идентификатор по умолчанию: 10933160239610460256k (я нашел этот идентификатор, когда пытался выяснить это решение с помощью анализа взаимодействий внешнего интерфейса GDrive)

$service->permissions->delete($file->id, '10933160239610460256k',array('supportsTeamDrives'=>true));

, затем создайте новое разрешение, подобное этому

$Permission = new \Google_Service_Drive_Permission(array(
    'type' => 'anyone',
    'role' => "reader",
    'additionalRoles' => [],
    'withLink' => true,
    'value' =>'YOUR_TEAM_DRIVE_DOMAIN' 
          ));
$service->permissions->create(
        $file->id, $Permission, array('fields' => 'id','supportsTeamDrives'=>true));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...