ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ToolJet 工作区常量(Workspace Constants)完全指南:全局常量与 Secret 的安全使用、多环境配置与源码原理

ToolJet 工作区常量(Workspace Constants)完全指南:全局常量与 Secret 的安全使用、多环境配置与源码原理 ToolJet 工作区常量Workspace Constants完全指南全局常量与 Secret 的安全使用、多环境配置与源码原理【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet工作区常量Workspace Constants是 ToolJet 中用于存储预定义值的机制可在应用、数据源、数据查询与工作流中复用以保持配置一致性、便于统一更新并安全保存 API Key、数据库凭据等敏感信息。本文以官方文档 constants.md 为骨架结合仓库源码前端 frontend/src、服务端 server/src/modules/organization-constants深入讲解其类型、特性、创建方式、访问语法、多环境配置与环境变量映射读完即可在 ToolJet 中安全落地一处定义、处处复用的常量体系。什么是工作区常量ToolJet 允许你设置工作区常量Workspace Constants用来存储可在整个应用中复用的预定义值。它的核心价值体现在三点保持一致同一值如 API 基础 URL在多处引用不会因手动复制而出现漂移便于更新修改一处定义所有引用位置同步生效安全存储所有常量与 Secret 在存入数据库前都会加密为敏感数据提供额外一层保护。工作区常量具有工作区隔离性它只属于创建它的工作区Workspace其他工作区无法访问。根据使用场景与敏感程度工作区常量分为两种类型全局常量Global Constants在工作区内的各应用之间复用的预定义值适合存储 API URL、配置项等常用值。全局常量在客户端浏览器侧解析因此其值对前端可见。Secret 常量Secret Constants专门用于安全存储 API Key、数据库凭据等敏感信息的常量。Secret 在前端会被掩码masked显示并以加密格式存储防止未经授权的用户窥探。Secret 在服务端解析不会暴露给客户端。注意Secret 常量不能用于 RunJS 或 RunPy 查询中因为脚本查询在浏览器端执行无法安全访问服务端解析的密钥。两类常量的特性对照下表完整列出了全局常量与 Secret 在各类场景下的支持情况特性全局常量 (Global Constants)Secret 常量 (Secrets)组件 (Components)✅❌数据查询 (Data Queries) *✅✅数据源 (Data Sources)✅✅工作流 (Workflows)✅即将推出 (Coming Soon)数据库中加密 (Encrypted in DB)✅✅前端掩码 (Masked in Frontend)❌✅客户端解析 (Resolved on Client Side)✅❌服务端解析 (Resolved on Server Side)❌✅命名约定 (Naming Convention){{constants.constant_name}}{{secrets.secret_name}}补充说明Secret 常量不能用于 RunJS 或 RunPy 查询如上文所述Secret 常量只能作为单个键使用即{{secrets.secret_name}}整体引用不能以组合键composite key的方式使用例如不能把多个 Secret 拼接成一个复合引用。按环境区分常量值Environment Specific ConfigurationsToolJet 允许你为不同环境如开发、预发布、生产的常量和 Secret 赋予不同的值。这在管理跨环境差异很大的敏感信息时至关重要——例如 API Key、数据库凭据、外部服务端点往往在开发、预发布和生产环境中各不相同。典型场景为每个环境配置独立的 API Key保证各环境之间的集成互不干扰、安全边界清晰。上图展示了工作区常量管理页面中按环境组织的常量视图左侧环境栏列出开发Development/预发布Staging/生产Production等环境及其常量数量切换环境即可查看或维护该环境下的常量值。创建工作区常量前置权限创建、更新或删除工作区常量需要Workspace constants/variables 权限权限的授予与管理详见 访问控制指南。操作步骤在 ToolJet 仪表盘的左侧边栏中进入Workspace Constants标签页。 示例 URLhttps://app.corp.com/nexus/workspace-constants点击Create new constant按钮打开配置抽屉Drawer。为工作区常量输入名称name和值value。选择工作区常量的类型Global constant全局常量Secret秘密常量点击Add constant按钮保存。重要限制一旦常量或 Secret 创建完成其类型无法更改。如需变更类型必须删除该常量后重新创建一个期望类型的常量。从前端实现看该管理页面由 BaseManageOrgConstants.jsx 承载它维护了CREATE / EDIT / DELETE三种模式、按环境 Tab 切换ConstantsEnvironmentsTabs以及全局/Secret 两个分类 TabConstants.Global与Constants.Secret并支持搜索与分页每页 6 条。其背后调用orgEnvironmentConstantService见 organization_constants.service.js与服务端 organization-constants 控制器 通信。访问工作区常量全局常量Global Constants全局常量使用{{constants.constant_name}}语法访问可用于应用构建器、数据源、数据查询和工作流。在应用构建器中使用在 App Builder应用构建器中左侧边栏的Inspector检查器区域可以查看当前工作区定义的全部常量直接以{{constants.constant_name}}形式在组件属性、事件处理等表达式中引用。在数据源与查询中使用全局常量让你可以定义一次处处复用数据源连接表单在创建/编辑数据源的连接配置字段中填入{{constants.constant_name}}即可让连接参数随常量统一管理例如数据库主机、端口或 REST API 的基础 URL查询管理器Query Manager中的查询在查询编辑器Query Editor的任意输入字段中使用全局常量。服务端在数据源相关逻辑中会显式识别这类引用例如 />上图中可以看到API_SECRET存在两个来源一个带.env标签来自环境变量另一个带duplicate标签UI 创建的同名项二者可清晰区分。设置全局常量设置单个全局常量语法TOOLJET_GLOBAL_CONSTANTS__environment__constant_name示例TOOLJET_GLOBAL_CONSTANTS__development__companyName Corp Pvt. Ltd.批量设置多个全局常量语法TOOLJET_GLOBAL_CONSTANTS__environment {name1: value1, name2: value2}示例TOOLJET_GLOBAL_CONSTANTS__development {company1: corp.com, company2: example.com}设置 Secret 常量设置单个 Secret 常量语法TOOLJET_SECRET_CONSTANTS__environment__constant_name示例TOOLJET_SECRET_CONSTANTS__development__apiKey agdagdagdg批量设置多个 Secret 常量语法TOOLJET_SECRET_CONSTANTS__environment {name1: value1, name2: value2}示例TOOLJET_SECRET_CONSTANTS__development {api_url: https://api.example.com, password: 12345, key: agdagdagdg}命名细节环境变量名中环境与名称之间使用双下划线__作为分隔符例如TOOLJET_GLOBAL_CONSTANTS__development__companyName解析时分别对应环境 development、常量名 companyName。源码级原理加密、掩码与服务端解析存储层所有常量加密入库无论是全局常量还是 Secret值在写入数据库前都会被加密。从 OrganizationConstantsUtilService 可以看到值的加解密统一委托给EncryptionService加密encryptSecret(workspaceId, value)调用encryptionService.encryptColumnValue(org_environment_constant_values, workspaceId, value)解密decryptSecret(workspaceId, value)调用encryptionService.decryptColumnValue(...)。加密实现位于 server/src/modules/encryption/service.ts采用AES-256-GCM对称加密每次加密生成 12 字节随机 nonce密文与认证标签一并 Base64 编码存储。同时该文件注释中明确提到迁移脚本1709618105785-EncryptValuesForExistingOrganizationConstants.ts见 server/data-migrations也复用了这一加密函数用于将存量组织常量批量加密——进一步印证了所有常量在库中均为密文的设计事实。按环境存储常量值挂在每个环境下常量实体存储于 organization_constants.entity.ts其值按环境拆分保存在org_environment_constant_values表中。创建常量时createOrgConstantsInAllEnvironments 会遍历该工作区的所有环境为每个环境创建一条初始为空的值记录更新时则按(environmentId, organizationConstantId)定位对应记录写入。这正是每个环境可以有不同的常量值这一特性的数据模型基础。读取时的权限区分解密 vs 掩码服务端 OrganizationConstantsService 在返回常量时根据调用场景做差异化处理全量解密接口GET /organization-constants/decryptedcontroller.ts带decryptSecretValuetrue仅对有权限的管理场景返回 Secret 明文公开/应用内接口GET /organization-constants/public/:slug、GET /organization-constants/:appId等默认只返回全局常量若遇到 Secret 类型则统一替换为掩码占位符secretValue **********见 service.ts 与 getConstantsForEnvironment掩码兜底util.service.ts 的 removeSecretValues 会把 Secret 的值批量替换为 8 个*确保任何外发响应都不带明文。权限模型按功能键Feature Key控制服务端控制器 controller.ts 定义了细粒度的功能键见 constants/index.ts 中的FEATURE_KEYget_decrypted获取解密后的常量含 Secret 明文get_public公开应用取常量get_from_app按应用 slug 取常量get_from_environment按环境取常量create/update/delete增删改get_secrets获取全部 Secret掩码形式。每个接口都挂载FeatureAbilityGuard能力守卫从而把创建/更新/删除工作区常量需要对应权限的文档说明落实为运行时强制校验。常量类型则定义为Global、Secret、Server三种枚举constants/index.ts数据库默认值为Global。前端表达式校验{{constants.*}}与{{secrets.*}}前端 utils.js 中提供了verifyConstant函数通过正则{{constants\.([a-zA-Z0-9_])}}与{{secrets\.([a-zA-Z0-9_])}}校验表达式中引用的常量是否已定义未定义时会返回 Undefined constants: xxx 的提示。也就是说常量名仅支持字母、数字与下划线。与之配套的 OrgConstantsVariablesPreviewBox.jsx 会在编辑表达式的输入框中实时解析{{constants.*}}/{{secrets.*}}并给出预览其中 Secret 一律以Values of secret constants are hidden提示隐藏真实值。使用建议与注意事项何时用全局常量需要在组件属性、数据源、查询、工作流中复用的非敏感配置如 API 端点、环境标识、通用名称用{{constants.xxx}}何时用 SecretAPI Key、数据库密码、OAuth Client Secret 等敏感凭据一律用{{secrets.xxx}}并牢记其不能在 RunJS/RunPy 中使用、只能以单键形式引用的限制多环境策略结合按环境配置值能力为 dev/staging/prod 分别维护常量值配合TOOLJET_GLOBAL_CONSTANTS__env__name与TOOLJET_SECRET_CONSTANTS__env__name环境变量注入可实现配置随环境走、密钥不进前端类型一经确定不可更改创建前确认常量类型避免后续删除重建的成本环境变量来源不可在 UI 编辑由.env映射的常量需通过重启容器来更新运维变更时需走发布流程。小结工作区常量是 ToolJet 中连接配置管理与安全防护的关键能力全局常量以{{constants.*}}在客户端灵活复用Secret 以{{secrets.*}}在服务端安全解析两者在数据库中一律 AES-256-GCM 加密存储读取时依据接口类型区分解密与掩码并由细粒度权限键控制访问。结合多环境配置与环境变量映射团队可以在不暴露敏感信息的前提下将跨应用的公共配置收敛为单一事实来源。相关实现可进一步查阅 organization-constants 服务端模块、加密服务 与 前端管理组件。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表