我正在使用服务帐户在我们的系统中创建新的日历。
async function newCalendar (email) {
console.log('creating calendar for username', email, 'as', config.google.calendar.clientEmail);
const auth = await getAuth();
const calendar = google.calendar({version: 'v3', auth});
const newCal = await calendar.calendars.insert({
resource: {summary: `SYSCALENDAR(${email})`}});
const calendarId = newCal.data.id;
const associated = await calendar.acl.insert({
calendarId,
requestBody: {
role: 'reader',
scope: {
type: 'user',
value: email
}
},
sendNotifications: false
});
return calendarId;
}
如上所述,日历被创建为执行calendars.insert调用的服务帐户所拥有。
我还注入了一个calendar.acl记录,我相信该记录授予'电子邮件'标识的用户访问此日历的权限。
在此片段中,我有:
sendNotifications: false
如果将其设置为true,则用户会收到一封有关新ACL条目的电子邮件,可以单击以将日历添加到他们自己的calendarList中。
我不想用户这样做,而是想将日历作为服务帐户添加到代码中的calendarList中。
这不像calendarList.insert(calendarId)那样简单,因为它将日历插入服务帐户calendarList。
Google处理由服务帐户创建/修改的日历的方式最近发生了变化。
解决该问题的唯一方法(仅适用于域用户)是Perform G Suite Domain-Wide Delegation of Authority。基本上,使服务帐户代表用户工作,并使服务帐户代表用户接受邀请。