Я использую аутентификацию учетной записи службы, чтобы создать листок Google, используя API Google Таблиц. Я хочу создать таблицу и как-то позволить моей команде открыть ее.
$private_key = file_get_contents($rootDir . '/config/googleApiCredentials.p12'); $client_email = 'project-names@positive-water-134xxx.iam.gserviceaccount.com'; $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 = 'myMail@gmail.com $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] => 1opxZmOf5dEPSLoKD1miMgwJRn643cXip6yCquPYxxx
Однако я не могу открыть этот файл через браузер, используя мою учетную запись google, даже когда Im добавил в качестве владельца, редактора, писателя и читателя в консоли разработчика Google, в разрешениях проекта. Браузер говорит, что я не понял, и я могу связаться с администратором для получения разрешений
Какие-либо предложения? Кто-нибудь управлял тем, как создавать документы и предоставлять доступ к ним для любого «человека»?
Учетная запись службы является фиктивным пользователем. У нее есть собственная учетная запись диска, которой принадлежит файл, созданный на его учетной записи. Учетная запись службы должна будет предоставить вашему персональному учетному записям google доступ к указанному файлу. (Поделитесь им с вами, как и любым другим пользователем)
Разрешения: insert Вставляет разрешение для файла.
Примечание. В настоящее время вы авторизованы для использования API-интерфейсов Google, которые вам необходимо будет добавить API-интерфейс (API) Google для вашего кода и вашего проекта на консоли разработчиков Google. Невозможно изменить права доступа к файлу с помощью API-интерфейсов google.
Да, вам нужно будет добавить разрешения для каждого члена вашей команды, который вы хотите разрешить для просмотра / редактирования этого файла.
Совет. Когда вы добавляете API Google Drive, попробуйте и выполните файл.list, ищите результаты поискаUrl , alternateLink и embedLink в результатах. Иногда они заполняются и могут использоваться для совместного доступа только к другому пользователю.
Разрешения для учетных записей домена можно предоставить:
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 user@myCompany.com ]); $this->driveService->permissions->insert($fileId, $domainPermission); return $response; }