使用 google apis 更改 google 电子表格的访问权限

vik*_*ram 1 google-api node.js google-drive-api google-api-nodejs-client google-sheets-api

我正在尝试使用 google API 更改我的 google 电子表格的可访问权限,我已经使用 google API 使用我的 google 服务帐户创建了它。

我还可以将其所有权授予其他电子邮件地址并保留自己的编辑权限吗?

生成代码(我使用的是node js):-

const client = new google.auth.JWT(
  keys.client_email,
  null,
  keys.private_key,
  ['https://www.googleapis.com/auth/spreadsheets']
);

client.authorize((err, tokens) => {
  if (err) {
    console.log('sheet auth err', err);
    return;
  }
  console.log('success auth');
});

app.post('/generateSheet', async (req, res, next) => {
  const { userId, sheetName } = req.body;
  console.log(userId, sheetName);
  // return res.redirect('/');
  const integrationName = 'Google_Sheets';

    const data = req.body;
  try {
    // const integrationInfoSnapshot = await db
        //  .doc(`integrationParameters/${integrationName}`)
    //   .get();
    try {
      const gsapi = google.sheets({
        version: 'v4',
        auth: client,
      });
      request_ = {
        resource: {
          properties: {
            title: sheetName
          }
        }
      }
      const response = await gsapi.spreadsheets.create(request_);

      // GIVE SPREADSHEET OWNERSHIP TO SOME OTHER EMAIL ADDRESS AND KEEP EDITING ACCESS TO MY SELF
 
      console.log(response);
    } catch (e) {
      console.log(`Error while creating google sheet for user: ${userId}: `, e);
    }
  } catch (e) {
        console.log(`Error while activating integration for user: "${userId}": `, e);
        res.status(500).send({ message: e.message });
    }
});
Run Code Online (Sandbox Code Playgroud)

如果有人能够回答,那将是一个很大的帮助。请帮忙!!!

Tan*_*ike 5

为了使用电子邮件授予作者权限,您可以使用 Drive API 中的 Permissions: create 方法来实现。不幸的是,在现阶段,Sheets API 还不能做到这一点。

例如,从您的脚本中,当向创建的电子表格授予权限时,脚本如下。

修改后的脚本:

从:
const client = new google.auth.JWT(
  keys.client_email,
  null,
  keys.private_key,
  ['https://www.googleapis.com/auth/spreadsheets']
);
Run Code Online (Sandbox Code Playgroud) 到:
const client = new google.auth.JWT(
  keys.client_email,
  null,
  keys.private_key,
  ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive']
);
Run Code Online (Sandbox Code Playgroud)

并且,还请修改如下。

从:
const response = await gsapi.spreadsheets.create(request_);
Run Code Online (Sandbox Code Playgroud) 到:
const response = await gsapi.spreadsheets.create(request_);

// I added below script.
const fileId = response.data.spreadsheetId;
drive = google.drive({ version: "v3", auth: client });
const res = await drive.permissions.create({
  resource: {
    type: "user",
    role: "writer",
    emailAddress: "###",  // Please set the email address you want to give the permission.
  },
  fileId: fileId,
  fields: "id",
});
Run Code Online (Sandbox Code Playgroud)

参考