首页 > 解决方案 > 使用服务帐号为用户创建团队云端硬盘

问题描述

我正在创建一个管理面板,该面板使用带有 PHP SDK 的 Google API 创建 G Suite 用户帐户。我已经完成了创建用户的部分,但现在我想知道如何为新创建的用户创建团队云端硬盘?我看不到可以添加新创建的用户 ID(如电子邮件)的参数。我错过了什么吗?

https://developers.google.com/drive/api/v3/reference/teamdrives/create

下面的代码可以创建团队云端硬盘,但它会被添加到创建服务帐户的 G Suite 帐户中。

$service = new \Google_Service_Drive($this->client($scopes));

$metadata = new Google_Service_Drive_TeamDrive();
$metadata->setName('My New Drive');

do {
   $requestId = Uuid::uuid4()->toString();
   try {
        $resp = $service->teamdrives->create($requestId, $metadata);
   } catch (Google_Service_Exception $e) {
        $resp['statusCode'] = $e->getCode();
        $resp['errors'] = $e->getErrors();
        $resp['message'] = $e->getMessage();
   }
} while ( isset($resp['statusCode']) );

标签: google-apigoogle-drive-apigoogle-api-php-clientgoogle-drive-shared-drive

解决方案


我通过在创建团队驱动器后立即附加驱动器权限解决了这个问题。不要忘记将可选参数 supportsTeamDrives 设置为 true

    $service = new \Google_Service_Drive($this->client($scopes));

    $postBody = new \Google_Service_Drive_Permission();
    $postBody->setKind('drive#permission');
    $postBody->setEmailAddress($email);
    $postBody->setType($type);
    $postBody->setRole($role);
    $optParams = [
        'supportsTeamDrives' => true
    ];

    try {
         $resp = $service->permissions->create($drive_id, $postBody, $optParams);
    } catch (Google_Service_Exception $e) {
         return abort($e->getCode());
    }

推荐阅读