You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script Web App能否设置分级权限及查询G Suite用户角色?

关于Google Apps Script Web App的权限管控与角色查询问题

一、能否设置更精细的权限层级(超级用户、组级权限)?

当然可以!默认的Web App权限(仅限@company.com用户访问)是基础范围管控,要实现超级用户、组级别的精细权限,需要你在脚本里手动添加逻辑判断,具体做法如下:

  • 超级用户权限:
    你可以在脚本里维护一个超级用户邮箱列表,直接判断当前登录用户是否在列表内:
    const SUPER_ADMINS = ['admin1@company.com', 'team-lead@company.com'];
    const currentUser = Session.getActiveUser().getEmail();
    
    if (SUPER_ADMINS.includes(currentUser)) {
      // 展示超级用户专属内容,比如后台管理面板、全量数据编辑权限等
    } else {
      // 展示普通用户可访问的内容
    }
    
    这种方式简单直接,适合小范围的超级用户管控。
  • 组级权限:
    如果你想用G Suite原生组来划分权限,需要先启用Admin Directory Service(在脚本编辑器的「资源」→「高级Google服务」里找到并开启),然后调用API检查用户是否属于指定组:
    const currentUser = Session.getActiveUser().getEmail();
    const isEditor = AdminDirectory.Members.has('editor-group@company.com', currentUser);
    const isViewer = AdminDirectory.Members.has('viewer-group@company.com', currentUser);
    
    if (isEditor) {
      // 开放编辑类功能权限
    } else if (isViewer) {
      // 仅提供查看权限
    } else {
      // 提示用户无对应权限访问
    }
    
    注意:使用这个服务需要Web App部署时选择「以我身份执行」(部署者需拥有G Suite管理员权限),这样脚本才能调用Admin Directory API查询组信息。

二、能否在Web App内查询用户的G Suite自定义角色?

完全可以,但同样依赖Admin Directory Service,且部署者必须具备G Suite管理员权限。具体实现步骤:

  1. 确保已在脚本编辑器中启用Admin Directory Service;
  2. 在服务器端脚本中调用API获取用户的角色信息:
    function getUserCustomRoles() {
      const currentUserEmail = Session.getActiveUser().getEmail();
      // 获取包含角色数据的完整用户信息
      const user = AdminDirectory.Users.get(currentUserEmail, {projection: 'full'});
      // 提取用户的角色列表,过滤并整理自定义角色
      const userRoles = user.roles || [];
      return userRoles.filter(role => role.isCustom).map(role => ({
        roleName: role.roleName,
        roleId: role.roleId
      }));
    }
    
  3. 你可以把这个函数的返回值传递给前端HTML,根据用户的自定义角色展示对应的功能模块。

额外注意事项

  • 所有权限判断逻辑一定要放在**服务器端脚本(.gs文件)**里,绝对不要写在前端HTML/JS中——前端代码容易被篡改,服务器端的判断才是安全可靠的;
  • 部署Web App时,权限设置要匹配需求:如果需要调用Admin Directory API,建议选择「以我身份执行」+「公司内任何人」,这样不需要每个用户单独授权;
  • 测试阶段可以用Logger.log()输出用户信息、组数据、角色列表,方便调试排查问题。

内容的提问来源于stack exchange,提问作者Jake Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:00:05