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检查用户是否属于指定组:
注意:使用这个服务需要Web App部署时选择「以我身份执行」(部署者需拥有G Suite管理员权限),这样脚本才能调用Admin Directory 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 Service,且部署者必须具备G Suite管理员权限。具体实现步骤:
- 确保已在脚本编辑器中启用Admin Directory Service;
- 在服务器端脚本中调用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 })); } - 你可以把这个函数的返回值传递给前端HTML,根据用户的自定义角色展示对应的功能模块。
额外注意事项
- 所有权限判断逻辑一定要放在**服务器端脚本(.gs文件)**里,绝对不要写在前端HTML/JS中——前端代码容易被篡改,服务器端的判断才是安全可靠的;
- 部署Web App时,权限设置要匹配需求:如果需要调用Admin Directory API,建议选择「以我身份执行」+「公司内任何人」,这样不需要每个用户单独授权;
- 测试阶段可以用
Logger.log()输出用户信息、组数据、角色列表,方便调试排查问题。
内容的提问来源于stack exchange,提问作者Jake Wilson
相关产品推荐
相关产品推荐

