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

控制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:02:11