【问题标题】:ScriptDb in Library accessed by WebAppWebApp 访问的库中的 ScriptDb
【发布时间】:2012-10-28 22:18:32
【问题描述】:

我创建了一个 Google Apps 脚本项目,该项目作为对任何人可见的 WebApp 发布,并作为访问用户运行。

此 WebApp 包含一个 Library 项目,该项目具有访问 ScriptDb 的方法,如下所示:

function getDb() {
  return ScriptDb.getMyDb();
}

function save(props) {
  return getDb().save(props);
}

我打算让每个访问用户运行一个 WebApp(使用基于时间的触发器来访问 Gmail),但是我想使用 ScriptDb 来独立于运行 WebApp 的用户存储数据。 所以我认为 Google Apps 脚本文档中的章节 Centralizing a Place to Get a Database Instance 适用于此,但是在访问 WebApp 时出现以下错误:

You do not have access to library MyDBLibrary, used by your script, or it has been deleted.

我做错了吗?当从 WebApp 访问时,ScriptDb 是否不打算独立于用户运行?

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    Joscha - 你的设置正确,我复制了你报告的所有内容。您最后缺少的是将图书馆项目本身分享给公众。

    这样做的方法是 1.在脚本编辑器中打开Library项目 2. 转到文件 -> 共享 3. 在“谁有访问权限”部分,将其设置为任何有链接的人都可以查看(不需要编辑)。

    没有这个,Apps 脚本现在知道可以向公众提供库代码。希望这可以帮助。

    【讨论】:

    • 成功了——我认为它应该足以让作为使用脚本所有者的人访问。与拥有链接的任何人共享...嗯...所以只要我不发布项目密钥,我想这不是安全风险,对吧?
    • ScriptDb 实例是项目私有的。只需确保任何 ScriptDb 访问方法都具有适当的范围(您可以通过在末尾添加“_”使方法在库中成为私有)。这样,即使其他人可以访问代码,如果他们持有项目密钥,数据也永远无法访问 - 即使他们在项目中导入,他们也无法访问 ScriptDb 实例。
    【解决方案2】:

    您可能需要打开development mode 标志才能使其工作。

    这就是我所做的。

    1. 用户 A:创建了一个 Master 电子表格并创建了一个应用脚本并将其保存为版本 1.0
    2. 用户 A:将此工作表的访问权限授予用户 B,以便他们可以使用通用应用脚本。
    3. 用户 A:将项目访问密钥授予用户 B。 4.用户B:创建电子表格并添加资源library with project key
    4. 用户 B:选择的版本1.0
    5. 用户 B:开启development mode

    注意:如果我按照步骤 1 到 5 操作,我仍然会看到相同的错误,提示我没有权限或脚本已被删除。但是,执行第 6 步也将解决错误并允许您使用共享脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多