3

Я использую аутентификацию учетной записи службы, чтобы создать листок Google, используя API Google Таблиц. Я хочу создать таблицу и как-то позволить моей команде открыть ее.Листы Google API v4 Создать лист и пригласить пользователей

$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] => 1opxZmOf5dEPSLoKD1miMgwJRn643cXip6yCquPYxxx 

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

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

+0

, которые вы аутентичности, как при создании файла? что вы подразумеваете под goole-api-services? Также, пожалуйста, добавьте службу create for $, чтобы мы могли видеть, как вы аутентифицируетесь, это может быть проще. – DaImTo

+0

@DalmTo, я использую учетную запись службы, созданную в консоли разработчиков. Он выглядит так: [email protected] – Mike

ответ

2

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

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

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

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

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

+0

Спасибо, попробуй! Вы знаете, есть ли способ добавить разрешения для нескольких пользователей одновременно с использованием псевдонимов? – Mike

+0

нет, вам нужно добавить их по одному. Однако ознакомьтесь с новым v3 диска Google api, сначала мои ссылки - все v2, с которыми у меня больше всего опыта. У него могут быть лучшие варианты. – DaImTo

0

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

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; 
}