3

サービスアカウント認証を使用して、GoogleシートAPIを使用してGoogleシートを作成しています。私はスプレッドシートを作成して、何とか私のチームがそれを開くことを許可します。シートが作成され、私はGoogleシートAPI v4シートを作成してユーザーを招待する

[spreadsheetId] => 1opxZmOf5dEPSLoKD1miMgwJRn643cXip6yCquPYxxx 

で応答を受け取るしかし、私はImは、所有者、編集者として追加しても、私のGoogleのアカウントを使用して、ブラウザを介してこのファイルを開くことができませんbeeingてさ

$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); 

、作家と読者、Googleのデベロッパーコンソールのプロジェクトの権限で。ブラウザには私が無防備であることが記載されており、許可のために管理者に連絡することができます

何か提案がありますか?ドキュメントを作成し、それにアクセスするための管理方法は誰でも管理していますか?

+0

? goole-api-servicesはどういう意味ですか?また、create for $サービスを追加して、どのように認証されているかを確認することもできます。 – DaImTo

+0

@DalmTo、私は開発者のコ​​ンソールで作成されたサービスアカウントを使用しています。それは次のようになります:[email protected] – Mike

答えて

2

サービスアカウントはダミーユーザーです。アカウントに作成したファイルを所有する独自のドライブアカウントを持っています。サービスアカウントは、個人用のGoogleドライブアカウントに前記ファイルへのアクセス権を付与する必要があります。 (他のユーザーと同じように共有してください)

Permissions: insertファイルのアクセス許可を挿入します。

注:あなたが現在あなたのコードとGoogleの開発者コンソール上のプロジェクトにグーグルドライブAPI(スコープ)を追加する必要があるとしているGoogleのシートのAPIを使用することを認証されます。 GoogleシートAPIを使用してファイルの権限を変更する方法はありません。

はい、このファイルの表示/編集を許可するチームのすべてのメンバーに権限を追加する必要があります。

ヒント:googleドライブAPIを追加して、files.listを検索すると、結果にdownloadUrl、alternateLink、およびembedlinkが表示されます。時にはこれらが記入され、他のユーザーだけが見ることができる共有に使用することができます。

+0

ありがとう、試してみましょう! エイリアスを使用して一度に複数のユーザーのアクセス許可を追加する方法があるかどうかご存知ですか? – Mike

+0

あなたは一度に1つずつ追加しなくてはなりません。しかし、Googleドライブの新しいv3を確認する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; 
} 
関連する問題