API листов Google v4 Создание листа и приглашение пользователей

Я использую аутентификацию учетной записи службы для создания листа Google с помощью API Google Sheets. Я хочу создать электронную таблицу и каким-то образом позволить моей команде открыть ее.

    $private_key  = file_get_contents($rootDir . '/config/googleApiCredentials.p12');
$client_email = '[email protected]';
$scopes       = implode(' ', ["https://www.googleapis.com/auth/drive"]);

$credentials = new \Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);
// tried once with additional constructor params:
// $privateKeyPassword = 'notasecret',
// $assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
// $sub = '[email protected]

$this->googleClient = new \Google_Client();
$this->googleClient->setAssertionCredentials($credentials);
if ($this->googleClient->getAuth()->isAccessTokenExpired()) {
$this->googleClient->getAuth()->refreshTokenWithAssertion();
}
$service = new \Google_Service_Sheets($this->googleClient);
$newSheet = new \Google_Service_Sheets_Spreadsheet();
$newSheet->setSpreadsheetId('34534534'); // <- hardcoded for test
$response = $service->spreadsheets->create($newSheet);
print_r($response);

Лист создается, я получаю ответ

[spreadsheetId] => 34534534

Однако я не могу открыть этот файл через браузер, используя учетную запись моего Google, даже когда я добавлен как владелец, редактор, писатель и читатель в консоль разработчика Google, в разрешениях проекта. Браузер говорит, что я не авторизован, и я могу связаться с администратором для разрешения

Какие-либо предложения? Кому-нибудь удалось как создать документы и дать к нему доступ любому «человеку»?

5

Решение

Сервисная учетная запись является фиктивным пользователем. У него есть собственная учетная запись на диске, которому принадлежит файл, созданный на его учетной записи. Учетная запись службы должна предоставить вашей личной учетной записи Google Drive доступ к указанному файлу. (Поделитесь с вами, как и любой другой пользователь)

Разрешения: вставить Вставляет разрешение для файла.

Замечания: В настоящее время вы прошли аутентификацию для использования API листов Google, который вам потребуется для добавления API (области действия) Google Drive в ваш код и ваш проект на консоли разработчиков Google. Невозможно изменить права доступа к файлу через API листов Google.

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

Совет. Когда вы добавляете Google Drive API, попробуйте сделать files.list поищите в результатах downloadUrl, alternateLink и embedLink. Иногда они заполняются и могут быть использованы для общего доступа к просмотру только для другого пользователя.

3

Другие решения

Можно дать разрешения для учетных записей домена:

private function createNewSheet($title)
{
$properties = new \Google_Service_Sheets_SpreadsheetProperties();
$properties->setTitle($title);

$newSheet = new \Google_Service_Sheets_Spreadsheet();
$newSheet->setProperties($properties);

$response = $this->sheetService->spreadsheets->create($newSheet);
$fileId = $response['spreadsheetId'];

$domainPermission = new \Google_Service_Drive_Permission([
'type'  => 'domain',
'role'  => 'writer',
'value' => 'myCompany.com' //eg [email protected]
]);

$this->driveService->permissions->insert($fileId, $domainPermission);
return $response;
}
0

По вопросам рекламы [email protected]