php - 更改已上传工作表的权限
问题描述
我遇到了一个问题,我有一张使用 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;
}
我一直在寻找这个谷歌文档,但每次我尝试在属性 JSON 前包含任何设置时:
'properties' => [
'title' => "test_sheet3",
'type' => 'group'
]
]);
我得到错误
"Invalid JSON payload received. Unknown name \"type\" at 'spreadsheet.properties': Cannot find field."
所以我不完全确定我的语法是否不正确,或者应该将它们添加到不是属性 JSON 的不同 JSON 附件中。
解决方案
我想提出以下修改。
修改点:
- 您可以使用 Drive API 中的“权限:创建”方法授予权限。您的问题中已经提到了这一点。在这种情况下,请求参数不能包含在 Sheets API 中的“spreadsheets.create”方法中。请使用 Drive API 中的“权限:创建”方法请求它。
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
$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));
当您想使用
group
时type
,请设置电子邮件地址。如果您想将权限授予用户,请修改
$newPermission->setType('group');
为$newPermission->setType('user');
并请使用电子邮件地址。
参考:
推荐阅读
- flutter - Flutter web 按钮大小问题
- shell - 命令 CFLAGS=... make" 不起作用
- php - 如何使用带有 $_SERVER['REQUEST_URI'] 的友好 url 强制 https?
- wpf - 当表单中没有剩余空间时,对齐下一行中的按钮
- python - 如何在 MySQL python 执行中有两个用户输入,其中 WHERE 条件是 1 个用户输入,而更新的 VALUES 是另一个?
- substrate - 在 Substrate 中,`spec_version` 和 `authoring_version` 有什么区别?
- php - 将两个不同的数组数据合并到一个数组php中
- javascript - 如何从给定的数字数组中找到最大数字?
- angular - Angular:如何将数据从按钮发送到服务?
- python-3.x - 将二进制字符串转换为二进制