如何为有限数量的人提供UIApp的访问权限?

时间:2014-08-03 13:04:48

标签: google-apps-script

我希望我明确邀请的人可以访问我的UiApp(GAS)应用程序
我不想发布我的应用程序以进行公共访问,但更喜欢为某些人提供一个链接(桌面快捷方式)到共享磁盘上的html文件(所以我只需要更新我的应用程序的链接,如果我更新它)。

在尝试实现这一目标时,我遇到了一些问题。

问题-1
我不希望用户能够看到我的代码 我怎样才能做到这一点?

问题-2
如果我执行应用程序 me 我无法检索实际用户(Session.getActiveUser()和Session.getEffectiveUser()都返回' me')并因为我不知道要显示的电子邮件或日历 如何检索允许显示实际用户的电子邮件和日历的信息(所以不要'我') 即使在启动应用程序时需要额外的参数,我也可以接受。

问题-3
我注意到,如果项目使用库,则应用程序不会运行,除非用户自己明确定义库。对我来说,似乎用户应该与此无关。如何避免这个问题(除了不使用库)? 就我而言,我使用库来记录一些信息。此库不位于共享磁盘上。即使我禁用了库(因此日志将转到系统默认记录器),应用程序也无法运行,因为会显示一条消息,指出库已丢失(并参考资源')。 我该怎么做才能避免这个问题?

1 个答案:

答案 0 :(得分:0)

这个问题需要很长时间才能回答,但我会尝试简短说明:

  1. 您不需要共享代码,将其保密。
  2. 应该将webapp部署为"用户执行应用程序"以便所有日历,文档等都是用户的日历。您应该允许任何人访问应用程序并在您的应用程序中创建登录标识:当用户尝试运行应用程序时,您会收到他的电子邮件(getActiveUser())并将此电子邮件与存储在scriptProperties中的列表进行比较。如果邮件不在列表中,则返回一条消息,说明不允许该用户运行该应用程序,并让脚本向您发送警报,以便您知道谁尝试过。
  3. 图书馆不应该是一个问题,我有使用适用于其他用户的库的脚本,除非他们必须做任何事情,除了授权。
  4. 为了说明,这是我用来控制webapp访问的一段代码:

    function doGet() {
      var clientOK = false;
      var client = PropertiesService.getScriptProperties().getProperty('clients').split();
      var email = Session.getActiveUser().getEmail();
      var app = UiApp.createApplication().setTitle('Order form').setStyleAttribute('background', 'beige');
      var mainPanel = app.createAbsolutePanel().setStyleAttribute('padding','25');
      var reject = app.createHTML("Hello,<BR><BR>You are connected with the address <B>"+email+"</B> that is not allowed to access this form,<BR><BR>"+
                                 "Please contact the webMaster if you think this is an error.<BR><BR>Thank you.").setStyleAttribute('padding','25'); 
        if(clients.join().match(email) == email){ clientOK = true ; var nom = email };
        if(!clientOK){
        app.add(reject)
        MailApp.sendEmail('myEmail@gmail.com', 'attempt to log in form', email+' tried to access the form and has been rejected. Think about asking him what happened !')
        return app
      }
     // continue normal code...
    

    编辑问题3:如果您使用的图书馆写入电子表格(作为记录器目的地),则此电子表格也必须与这些用户共享。即使他们不需要从他们的驱动器打开该电子表格,他们也可以这样做,因为它将出现在他们与我共享的电子表格中。查看他们的驱动器。也就是说,一旦开发阶段结束,你可以摆脱它吗?