如何在谷歌应用脚本自定义函数中获取"active user"的用户属性



我已经发布了一个Google Apps Script独立的电子表格插件,而我在自定义函数中使用PropertiesService.getUserProperties()时遇到了一些问题。

如果用户 A 已安装加载项并在用户属性中保存了一些数据。 然后,用户 A 将电子表格共享给用户 B。当用户 B 运行自定义函数时,他可以在用户 A 的用户属性中获取保存的数据。这不是我认为用户属性的工作原理。用户 A 和 B 都应该获得自己保存的数据。

那么,共享电子表格的活跃用户是什么?我不希望所有电子表格查看器都获取电子表格创建者的保存数据。我在代码或"云平台项目">选项中做错了什么吗?

换句话说,如何在共享电子表格中为不同的查看者获取保存在用户属性中的不同数据?

我尝试在自定义函数中获取活动用户电子邮件,但它不起作用。

请注意,我不能在自定义函数中使用Session.getActiveUser,因为 Google Apps 脚本自定义函数不支持会话服务。它将获得无效的权限异常。

https://developers.google.com/apps-script/guides/sheets/functions#Advanced

谢谢

在编写了大量代码来测试不同的场景之后,我认为它没有办法解决上述问题。

因此,我将使用解决方法来实现目标。万一有人也遇到麻烦。我会在这里写下我的测试结果。

如果谷歌帐户 A 将电子表格共享给谷歌帐户 B。

  1. 在自定义函数中,它们都获取 A 的用户属性。
  2. 从网页中,通过 script.run 调用服务器函数,A 和 B 都可以 获取自己的用户属性。

自定义函数无法访问PropertiesServices.userProperties()(电子表格所有者可能例外)。

据 https://developers.google.com/apps-script/guides/sheets/functions

与大多数其他类型的应用脚本不同,自定义函数从不要求用户授权访问个人数据。因此,他们只能调用无权访问个人数据的服务,特别是以下内容:

虽然属性包含在列表中,并且此服务没有任何注释,但由于自定义函数不要求用户授权访问个人数据,因此它不应返回PropertiesServices.userProperties(),因为它可能会存储用户个人数据。

如何使用根文件夹 ID 来区分用户? DriveApp.getRootFolder().getId();这应该是"我的云端硬盘"的 ID,每个用户都不同。 可以将其用作属性存储中的键的一部分。这可能是一个安全漏洞,因为任何对代码具有编辑权限的人都可以添加一个函数来检索用户"我的云端硬盘"的所有 ID 以及个人的电子表格数据。

最新更新