【问题标题】:change access permissions of google spreadsheet using google apis使用 google apis 更改 google 电子表格的访问权限
【发布时间】:2020-10-28 02:10:27
【问题描述】:

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

我还可以将它的所有权授予其他电子邮件地址并让我自己继续编辑吗?

生成代码(我使用的是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 });
    }
});

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

【问题讨论】:

    标签: node.js google-api google-drive-api google-sheets-api google-api-nodejs-client


    【解决方案1】:

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

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

    修改脚本:

    从:
    const client = new google.auth.JWT(
      keys.client_email,
      null,
      keys.private_key,
      ['https://www.googleapis.com/auth/spreadsheets']
    );
    
    到:
    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']
    );
    

    另外,请进行如下修改。

    从:
    const response = await gsapi.spreadsheets.create(request_);
    
    到:
    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",
    });
    

    参考

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多