googleapis 服务帐户创建新的电子表格并向用户授予权限
googleapis service account create new spreadsheet and grant permissions to user
我能够使用服务帐户创建 google sheet,但是无法为用户插入对 sheet 的权限:
function createSheet(jwt, apiKey) {
const sheets = google.sheets({version: 'v4'});
var request = {
resource: {
"properties": {
"title": "testSheet"
}
},
auth: jwt
};
下面是来自 create sheet api 的响应:
config: {transformRequest: {…}, transformResponse: {…}, timeout: 0, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", …}
data: {spreadsheetId: "XXX", properties: {…}, sheets: Array(1), spreadsheetUrl: "https://docs.google.com/spreadsheets/d/XXX/edit"}
...
status: 200
statusText: "OK"
我的代码。
function insertPermission(fileId) {
var body = {
'value': 'xxx@gmail.com',
'type': 'user',
'role': 'owner'
};
var drive=google.drive({version: 'v3'});
drive.permissions.create({
'fileId': fileId, //sheetID returned from create sheet response
'resource': body
}, function(err, response) {if (err) {
console.error(err);
return;
} else{
console.log(JSON.parse(JSON.stringify(response))) ;
}
});
insertPermission 错误:
index.js:114 Error: Insufficient Permission
at createError
或者,有没有办法在 sheets.create api 中指定文件权限?
Insufficient Permission at createError
通常意味着您登录的用户无权执行他们正在尝试执行的操作。
- 您确定它是此插入内容的服务帐户吗,因为它拥有该文件,只有它可以转让所有权。
- 您是如何作为服务帐户登录的?您是否有类似作用域的任何东西?您是否添加了写入作用域之一。
如果你勾选 transferring_ownership
var fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
var permissions = [
{
'type': 'user',
'role': 'writer',
'emailAddress': 'user@example.com'
}, {
'type': 'domain',
'role': 'writer',
'domain': 'example.com'
}
];
// Using the NPM module 'async'
async.eachSeries(permissions, function (permission, permissionCallback) {
drive.permissions.create({
resource: permission,
fileId: fileId,
fields: 'id',
}, function (err, res) {
if (err) {
// Handle error...
console.error(err);
permissionCallback(err);
} else {
console.log('Permission ID: ', res.id)
permissionCallback();
}
});
}, function (err) {
if (err) {
// Handle error
console.error(err);
} else {
// All permissions inserted
}
});
我能够使用服务帐户创建 google sheet,但是无法为用户插入对 sheet 的权限:
function createSheet(jwt, apiKey) {
const sheets = google.sheets({version: 'v4'});
var request = {
resource: {
"properties": {
"title": "testSheet"
}
},
auth: jwt
};
下面是来自 create sheet api 的响应:
config: {transformRequest: {…}, transformResponse: {…}, timeout: 0, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", …}
data: {spreadsheetId: "XXX", properties: {…}, sheets: Array(1), spreadsheetUrl: "https://docs.google.com/spreadsheets/d/XXX/edit"}
...
status: 200
statusText: "OK"
我的代码。
function insertPermission(fileId) {
var body = {
'value': 'xxx@gmail.com',
'type': 'user',
'role': 'owner'
};
var drive=google.drive({version: 'v3'});
drive.permissions.create({
'fileId': fileId, //sheetID returned from create sheet response
'resource': body
}, function(err, response) {if (err) {
console.error(err);
return;
} else{
console.log(JSON.parse(JSON.stringify(response))) ;
}
});
insertPermission 错误:
index.js:114 Error: Insufficient Permission at createError
或者,有没有办法在 sheets.create api 中指定文件权限?
Insufficient Permission at createError
通常意味着您登录的用户无权执行他们正在尝试执行的操作。
- 您确定它是此插入内容的服务帐户吗,因为它拥有该文件,只有它可以转让所有权。
- 您是如何作为服务帐户登录的?您是否有类似作用域的任何东西?您是否添加了写入作用域之一。
如果你勾选 transferring_ownership
var fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
var permissions = [
{
'type': 'user',
'role': 'writer',
'emailAddress': 'user@example.com'
}, {
'type': 'domain',
'role': 'writer',
'domain': 'example.com'
}
];
// Using the NPM module 'async'
async.eachSeries(permissions, function (permission, permissionCallback) {
drive.permissions.create({
resource: permission,
fileId: fileId,
fields: 'id',
}, function (err, res) {
if (err) {
// Handle error...
console.error(err);
permissionCallback(err);
} else {
console.log('Permission ID: ', res.id)
permissionCallback();
}
});
}, function (err) {
if (err) {
// Handle error
console.error(err);
} else {
// All permissions inserted
}
});