【问题标题】:Changing the permissions of an uploaded sheets更改已上传工作表的权限
【发布时间】:2020-07-28 18:01:54
【问题描述】:

我遇到了一个问题,我有一张使用 Sheets PHP API 上传的工作表,现在我需要更改该工作表的权限。如果权限是在上传时设置或稍后更改,对我来说并不重要。这是我的上传代码的样子

function createSheet(){
    $client = getClient();
    $service = new Google_Service_Sheets($client);
    $spreadsheet = new Google_Service_Sheets_Spreadsheet([
        'properties' => [
            'title' => "test_sheet3",
        ]
    ]);
    $spreadsheet = $service->spreadsheets->create($spreadsheet, [
        'fields' => 'spreadsheetId'
    ]);
    printf("Spreadsheet ID: %s\n", $spreadsheet->spreadsheetId);
    return $spreadsheet->spreadsheetID;
}

我一直在寻找这个google documentation,但每次我尝试在属性 JSON 前包含任何设置时:

        'properties' => [
            'title' => "test_sheet3",
            'type' => 'group'
        ]
    ]);

我得到了错误

"Invalid JSON payload received. Unknown name \"type\" at 'spreadsheet.properties': Cannot find field."

所以我不能完全确定我的语法是否不正确,或者应该将它们添加到不是属性 JSON 的不同 JSON 附件中。

【问题讨论】:

    标签: php google-drive-api google-sheets-api


    【解决方案1】:

    我想提出以下修改。

    修改点:

    • 您可以使用 Drive API 中的“权限:创建”方法授予权限。您的问题中已经提到了这一点。在这种情况下,请求参数不能包含在 Sheets API 中的“spreadsheets.create”方法中。请使用 Drive API 中的“Permissions: create”方法请求。

    当以上几点反映到你的脚本中时,它变成如下。

    修改脚本:

    $client = getClient();
    $service = new Google_Service_Sheets($client);
    $spreadsheet = new Google_Service_Sheets_Spreadsheet([
        'properties' => [
            'title' => "test_sheet3",
        ]
    ]);
    $spreadsheet = $service->spreadsheets->create($spreadsheet, [
        'fields' => 'spreadsheetId'
    ]);
    printf("Spreadsheet ID: %s\n", $spreadsheet->spreadsheetId);
    
    
    // I added below script
    $drive = new Google_Service_Drive($client);
    $newPermission = new Google_Service_Drive_Permission();
    $newPermission->setEmailAddress('###@gmail.com');
    $newPermission->setType('group');
    $newPermission->setRole('writer');
    $res = $drive->permissions->create($spreadsheet->spreadsheetId, $newPermission);
    // print_r($res);
    
    
    return $spreadsheet->spreadsheetID;
    

    注意:

    • 在这种情况下,作为测试,我使用了https://www.googleapis.com/auth/drive 的范围。为此,请使用以下脚本。并且当您修改范围时,请包含刷新令牌的文件并重新授权范围。这样,修改后的范围可以反映到访问令牌中。请注意这一点。

        $client->setScopes(array(Google_Service_Sheets::SPREADSHEETS, Google_Service_Drive::DRIVE));
      
    • 当您想使用grouptype时,请设置电子邮件地址。

    • 如果您想将权限授予用户,请将$newPermission->setType('group');修改为$newPermission->setType('user');并使用邮箱地址。

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多