在 Apps 脚本的服务器功能中为一个 Web 用户设置全局属性

问题描述 投票:0回答:1

我有一个 Apps 脚本应用程序,它为两个 HTML 界面之一提供服务,并具有许多后端功能。我不知道如何使用某种全局变量/切换来更改服务器端函数的行为。

这就是我向用户提供页面的方式,一些用户获得带有附加设置的管理页面(例如关闭松弛通知)

function doGet() {
  // This built-in function will check group membership for us and returns a single object with an isMember bool
  if (AdminDirectory.Members.hasMember(ADMIN_USERS_GROUP, Session.getActiveUser().getEmail()).isMember) {
    return HtmlService.createTemplateFromFile("admin").evaluate();
  }
  else if (AdminDirectory.Members.hasMember(ALLOWED_USERS_GROUP, Session.getActiveUser().getEmail()).isMember) {
    return HtmlService.createTemplateFromFile("index").evaluate();
  }
  else { return HtmlService.createTemplateFromFile("noaccess").evaluate(); }
}

用户登录Web界面并以HTML表单输入数据以运行后端功能。通常,这些函数会调用一个发布到 Slack 的函数来记录其操作:

/**
 * Add a filter and label to a user's account to filter mail from another user to the label, skipping the inbox
 * @param {Object} formObject - form object from frontend
 */
function frontend_modifyForwardingDelegation(formObject) {
...
  modifyGmailACLs(raw_sourceUser, raw_targetUser, option, action);
}

/**
 * Modify Gmail acls for an account
 * @param {string} sourceUser - email or username of user to modify
 * @param {string} targetUser - email or username of user to create a relationship with
 * @param {string} option - forward or delegate 
 * @param {string} action - create or delete
 */
function modifyGmailACLs(raw_sourceUser, raw_targetUser, option, action) {
// code
sendSlackString(message);
}

// in another file
function sendSlackString(slackBody) {
  if (SLACK_POST=='enabled') {
    var template = {
      "blocks": [
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": `${slackBody}`
          }
        }
      ]
    }
    sendSlackMessage(template);//this actually makes the api call
  } else {
    console.info(`Slack posting disabled for message\n\n${slackBody}`);
  }
} 

// this is in the frontend JS. It's connected to a radio button toggle HTML form. only users on the admin.html page see this option
function toggleSlackMessages(form) {
google.script.run.withFailureHandler(showFail).withSuccessHandler(toggleSlackSuccess).frontend_toggleSlack(form);
    }

属性服务中的

setProperties
功能看起来很接近,因为它只能为一个用户工作,但我在测试中意识到服务器功能始终以同一用户身份运行,所以这是行不通的。服务器端 sendSlackString 服务器函数需要根据客户端的登录用户以及他们在 Web UI 中执行的操作进行更改。

有没有一种干净的方法来设置与应用程序脚本中的用户绑定的变量?

google-apps-script web-applications
1个回答
0
投票

恐怕你还没有提到你是如何部署你的Web应用程序以及你使用了哪些属性存储。

首先调整您的 Web 应用程序以使用 PropertiesService.getUserProperties() 获取 PropertiesService.Properties 对象,然后部署您的 Web 应用程序以访问 Web 而不是“我”的用户身份运行。

© www.soinside.com 2019 - 2024. All rights reserved.