控制Google Sheets中可运行App Script的用户角色
解决方案
1. 配置角色映射表
新建一个隐藏工作表(命名为权限配置即可),A列填写协作成员的邮箱,B列对应标注角色(员工、经理1、经理2)。利用你已完成的单元格权限控制,确保这个工作表只有管理员能编辑,普通用户仅能查看。
2. 编写通用身份验证函数
在App Script文件中新增一个通用函数,用来快速获取当前用户的角色,避免重复编写校验逻辑:
function getUserRole() { const email = Session.getActiveUser().getEmail(); const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('权限配置'); const data = sheet.getDataRange().getValues(); // 跳过表头,遍历匹配用户邮箱 for (let i = 1; i < data.length; i++) { if (data[i][0] === email) { return data[i][1]; } } return '未知角色'; }
3. 给每个业务函数添加权限校验
给三个绑定按钮的函数分别加上角色校验,不符合权限的用户执行时会直接弹出提示并终止操作:
员工专属函数示例
function employeeFunction() { const role = getUserRole(); if (role !== '员工') { SpreadsheetApp.getUi().alert('你没有权限执行此操作'); return; } // 此处编写原本的员工函数业务逻辑 // ... }
经理1专属函数示例
function manager1Function() { const role = getUserRole(); if (role !== '经理1') { SpreadsheetApp.getUi().alert('你没有权限执行此操作'); return; } // 此处编写原本的经理1函数业务逻辑 // ... }
经理2专属函数示例
function manager2Function() { const role = getUserRole(); if (role !== '经理2') { SpreadsheetApp.getUi().alert('你没有权限执行此操作'); return; } // 此处编写原本的经理2函数业务逻辑 // ... }
额外说明
- 即便有人绕过按钮,直接在App Script编辑器运行函数,权限校验依然生效——
Session.getActiveUser()会获取当前执行脚本的用户邮箱。 - 后续调整角色或新增成员,只需修改
权限配置工作表即可,无需改动代码。 - 可以右键
权限配置工作表标签选择「隐藏工作表」,避免普通用户误操作。
内容的提问来源于stack exchange,提问作者Hobby_Web_programmer
相关产品推荐
相关产品推荐

