能否用Google App Scripts创建多用户数据隔离的Web App?
多用户隔离的Google表格数据可视化Web仪表板实现方案
一、基础架构选型
- 后端用轻量框架:比如Node.js + Express,或者Python + Flask,负责处理登录校验、权限判断和Google表格数据的中转。
- 前端选灵活方案:React/Vue或者纯HTML+JS均可,重点实现登录页和可视化仪表板,图表用Chart.js、ECharts这类成熟库。
- 数据库存用户信息:小用户量用SQLite,量大就上PostgreSQL,核心存储账号、密码哈希(绝对不能存明文)、用户对应的Google表格权限范围。
二、用户认证与权限配置
- 数据库表设计
创建users表,核心字段:
id:用户唯一标识username:登录账号password_hash:密码的bcrypt哈希值sheet_permission:比如存储允许访问的工作表名(如"User_Alice"),或者同一工作表内的过滤条件(如"user_id=1")
- 登录流程
- 用户在前端提交账号密码,后端查询数据库匹配账号,用bcrypt验证密码哈希是否正确。
- 验证通过后生成JWT(JSON Web Token),返回给前端存在localStorage或HttpOnly Cookie里。
- 后续前端所有数据请求都要在请求头带上JWT,后端先校验token有效性,再提取用户权限信息。
三、Google表格数据隔离与对接
前期准备
启用Google Sheets API,创建服务账号并下载密钥JSON文件,给服务账号分配目标表格的查看权限(确保服务账号能读取表格数据)。数据隔离逻辑
- 表格数据拆分方式二选一:
① 给每个用户单独建一个工作表,命名和用户权限字段对应(如"User_Bob")。
② 在同一个工作表里新增user_id列,每条数据标记所属用户ID。 - 后端数据请求流程:
收到前端带JWT的请求后,解析出用户的sheet_permission:- 如果是单独工作表,直接调用Google Sheets API请求对应工作表的数据:
GET https://sheets.googleapis.com/v4/spreadsheets/{表格ID}/values/{工作表名} - 如果是同一工作表的过滤数据,先调用API拿到全量数据,再在后端根据
user_id过滤出该用户的数据(禁止让前端拿到全量数据)。
- 如果是单独工作表,直接调用Google Sheets API请求对应工作表的数据:
注意:所有Google Sheets API请求必须由后端发起,绝对不能让前端直接调用,防止泄露服务账号凭证和越权访问数据。
四、前端可视化实现
- 登录页:做简单的表单,提交后处理JWT存储,自动跳转仪表板。如果没有有效token,访问仪表板时强制跳转到登录页。
- 仪表板页:
- 页面加载时,携带JWT请求后端的
/api/get-user-data接口,获取该用户权限内的数据。 - 拿到结构化数据后,用ECharts或Chart.js渲染折线图、柱状图、表格等可视化组件。
- 可添加刷新按钮,重新请求数据更新可视化内容。
- 页面加载时,携带JWT请求后端的
五、安全关键细节
- 密码必须用bcrypt或Argon2做哈希存储,禁止明文。
- JWT设置短过期时间(比如1小时),同时开启HTTPS,防止token被窃听。
- 服务账号密钥存在后端环境变量里,绝对不能硬编码到代码或提交到版本库。
- 后端要做双重权限校验:即使前端篡改请求参数,后端也要重新核对用户是否有权限访问对应数据区域。
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

