尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ToolJet 用户归档与取消归档完整指南:实例级与工作区级的权限控制、状态流转与底层实现
ToolJet 用户归档与取消归档完整指南实例级与工作区级的权限控制、状态流转与底层实现【免费下载链接】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归档Archive是 ToolJet 中回收用户访问权限而非删除用户的重要手段。管理员可以将工作区中的某个用户归档使其立即失去对该工作区的访问能力同时完整保留该用户此前创建的所有应用、查询与配置数据当业务需要时又可以随时通过取消归档Unarchive让用户重新回到工作区。本指南将基于 ToolJet 3.0.0-LTS 文档与当前仓库源码系统讲解实例级与工作区级归档/取消归档的操作步骤、状态语义、底层数据模型与关键实现帮助你正确管理用户生命周期。归档的核心语义移除访问权保留数据归档的本质是软禁用。根据官方文档管理员归档工作区中的用户后会发生两件事用户立即失去对该工作区的访问权限无法再登录、查看或编辑其中的应用用户此前创建的应用以及所有更改都会被完整保留不会被删除后续如果业务需要管理员可以取消归档该用户将其重新邀请回工作区。这与删除用户有本质区别删除通常意味着数据清理与不可恢复而归档是一条可逆的回收路径适合离职、休假、权限冻结等临时或长期的访问管控场景。两条强制约束归档操作并非毫无限制官方文档明确了两条规则已归档用户不计入计费/许可billing/licensing这意味着归档既能释放席位又无需删除数据。在源码中也有印证计费统计服务 在统计活跃用户数时会显式排除USER_STATUS.ARCHIVED状态如users.status ! :archived、status: Not(USER_STATUS.ARCHIVED)等查询条件。工作区必须保留至少一名活跃管理员不能归档工作区中全部管理员。这条规则在服务端有硬性校验详见下文源码解析。实例级Instance Level与工作区级Workspace Level的区别ToolJet 的用户管理分为两个层级归档/取消归档在两层的行为差异非常关键维度实例级Instance Level工作区级Workspace Level操作入口Settings All UsersWorkspace settings Users示例 URLhttps://app.corp.com/instance-settings/all-usershttps://app.corp.com/nexus/workspace-settings/users所需角色Super Admin超级管理员Admin工作区管理员影响范围用户从所有工作区被归档且无法被邀请到任何新工作区仅移除用户在当前工作区的访问权限不影响其他工作区对应后端能力archive-all / unarchive-all跨工作区批量生效archive / unarchive限定单个工作区从仓库前端代码可以直观看到这两类操作是分开的 APIorganization_user.service.js 中同时暴露了archiveAll/unarchiveAll对应POST /organization-users/:userId/archive-all与/unarchive-all和archive/unarchive对应POST /organization-users/:id/archive与/unarchive两套接口。归档用户Archive User操作步骤实例级归档Super Admin当用户在实例级被归档后会被自动从所有工作区移除且无法再被邀请到任何新工作区。操作步骤点击仪表盘左下角的设置图标⚙️进入Settings All Users示例 URLhttps://app.corp.com/instance-settings/all-users找到需要归档的用户点击其所在行末尾的 kebab 菜单竖排三点图标选择Archive user该用户的状态列会更新为 archived。工作区级归档Admin工作区级归档只移除用户对当前工作区的访问权用户在其他被邀请的工作区仍然可用。操作步骤点击仪表盘左下角的设置图标⚙️进入Workspace settings Users示例 URLhttps://app.corp.com/nexus/workspace-settings/users找到目标用户点击其行末的 kebab 菜单选择Archive user状态列更新为 archived。取消归档用户Unarchive User操作步骤实例级取消归档Super Admin注意用户仅在实例级被取消归档后并不会自动恢复任何工作区。管理员还需要在每个工作区中单独取消归档或重新邀请该用户。操作步骤点击左下角设置图标⚙️进入Settings All Users找到目标用户点击 kebab 菜单选择Unarchive user用户状态更新为invited。工作区级取消归档Admin工作区级取消归档有一个值得注意的联动效果如果用户在工作区级被取消归档其实例级状态也会被自动取消归档。操作步骤点击左下角设置图标⚙️进入Workspace settings Users找到目标用户点击 kebab 菜单选择Unarchive user用户状态更新为invited并且系统会向该用户发送一封新的邀请邮件invitation mail用户需通过邮件中的邀请链接重新加入工作区。状态模型归档背后的数据语义要深入理解归档行为需要先了解 ToolJet 中用户状态的两套枚举。它们分别定义在 server/src/modules/users/constants/lifecycle.ts实例级用户状态USER_STATUSinvited已邀请、verified已验证、active活跃、archived已归档。工作区用户状态WORKSPACE_USER_STATUSinvited已邀请、active活跃、archived已归档。可以看到归档状态的落点同时存在于用户实体User与工作区用户关联实体OrganizationUser两个层面这正是实例级归档影响所有工作区、工作区级归档只影响单个工作区的数据基础。工作区用户来源WORKSPACE_USER_SOURCE也分为invite邀请与signup注册两类取消归档后工作区用户会被重新标记为invite来源并生成新的邀请令牌。此外lifecycle.ts 中还定义了一个用户友好的错误提示当已归档用户尝试访问时系统会返回You have been archived from this instance. Contact super admin to know more.明确指引其联系超级管理员处理。源码级原理归档与取消归档的完整调用链前端交互入口前端用户列表中的 kebab 菜单由 UsersActionMenu.jsx 组件渲染。其中 Archive 按钮会根据当前用户状态动态切换文案与动作user.status archived时显示Unarchive user并调用unarchiveOrgUser(user)否则显示Archive user并调用archiveOrgUser(user)当归档/取消归档请求进行中archivingUser user.id或unarchivingUser user.id按钮会被禁用避免重复提交。后端 API 端点归档相关的能力集中在 server/src/modules/organization-users/controller.ts方法端点说明POST/organization-users/:id/archive单工作区归档organizationId取自请求体缺省时使用当前用户所在工作区POST/organization-users/:userId/archive-all实例级归档所有工作区且禁止自我归档Self archive not allowedPOST/organization-users/:id/unarchive单工作区取消归档POST/organization-users/:userId/unarchive-all实例级取消归档所有工作区这些端点都带有InitFeature(FEATURE_KEY.USER_ARCHIVE / USER_UNARCHIVE / ...)特性开关标记且依赖角色权限体系CASL的授权校验。归档的服务端实现核心逻辑在 server/src/modules/organization-users/service.ts 中archive(id, organizationId)单工作区在数据库事务内先校验目标用户不是最后一个活跃管理员throwErrorIfUserIsLastActiveAdmin随后将 OrganizationUser 的状态置为WORKSPACE_USER_STATUS.ARCHIVED并清空邀请令牌invitationToken防止被归档者继续使用旧邀请链接进入最后写入审计日志记录归档用户与被归档者邮箱、姓名以及对应工作区名称与 ID。archiveFromAll(userId)实例级查找该用户的所有 OrganizationUser 记录并批量更新为 archived、清空邀请令牌同时将 User 实体的实例级状态更新为USER_STATUS.ARCHIVED并记录跨工作区的审计日志。最后一个活跃管理员的校验逻辑throwErrorIfUserIsLastActiveAdmin会查询该工作区所有 Admin 角色用户筛选出状态为active的活跃管理员如果目标用户是唯一活跃管理员则抛出BadRequestException(Atleast one active admin is required)从机制上保证了至少保留一名活跃管理员的约束。取消归档的服务端实现unarchiveUser(userId)实例级特殊处理用户在 invited 状态下被归档的场景——如果用户实例级状态为 archived 且仍持有邀请令牌则恢复为invited否则恢复为active随后进行 license 校验并写入审计日志。unarchive(user, id, organizationId)单工作区首先校验目标 OrganizationUser 必须处于ARCHIVED状态否则抛出User status must be archived to unarchive随后生成全新的 UUID 邀请令牌与过期时间过期分钟数由环境变量LINK_EXPIRY_MINUTES控制未配置或非正数时不设过期将工作区用户状态置为invited、来源置为invite最后根据用户是否已在实例级激活选择发送setup/welcome 邮件或工作区欢迎邀请邮件见EMAIL_EVENTS.SEND_WELCOME_EMAIL与SEND_ORGANIZATION_USER_WELCOME_EMAIL——这正是文档所述取消归档后用户会收到新的邀请邮件的底层来源。边界情况与注意事项结合文档与源码使用归档功能时还应注意以下几点归档不可逆的唯一门槛是数据保留归档后所有应用与改动都保留取消归档后数据立即恢复可见因此归档适合作为临时、可逆的访问管控手段。实例级取消归档 ≠ 恢复工作区访问实例级 unarchive 只解除全局禁用各工作区的访问需要管理员逐工作区重新取消归档或邀请工作区级 unarchive 会自动联动恢复实例级状态但反向不成立。邀请令牌会失效并被刷新归档会清空邀请令牌取消归档会生成新令牌并重新发送邮件旧链接无法再使用。计费立即生效归档用户不计入席位取消归档后重新计入因此该功能也常用于许可证席位紧张时的临时收缩。管理员保护机制工作区最后一名活跃管理员无法被归档避免工作区陷入无人管理的状态。批量导入的连带影响在 service.ts 的 CSV 批量上传逻辑中已归档用户的邮箱会被单独收集并直接抛出错误提示User with email ... is archived. No users were uploaded即归档用户不能通过批量上传重新邀请必须先取消归档。小结ToolJet 的归档/取消归档功能通过实例级 工作区级的双层设计配合User与OrganizationUser两套状态模型实现了可逆的访问回收、自动化的邀请邮件恢复以及与计费席位联动的能力。对运维与管理员而言只需记住三条原则归档即软移除、数据永远保留、最后一名活跃管理员不可归档即可安全地管理团队成员的访问生命周期。若需进一步了解用户管理相关的其他能力可继续阅读 用户管理文档目录 下的其他主题或查阅本文引用的前端组件与后端服务源码深入实现细节。【免费下载链接】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),仅供参考
RELATED

相关推荐

用朴素贝叶斯做豆瓣短评情感分析:从原理到实战

用朴素贝叶斯做豆瓣短评情感分析:从原理到实战

豆瓣短评是我见过的文本数据里非常适合练手情感分析的一种——长度短、情绪直接、口语化表达多,正负样本的区分度天然明显。用朴素贝叶斯来做这件事,不是因为它在深度学习时代"老派",而是因为它在这个场景下可解释性强、训练成本极…

📅 2026/9/13 6:04:30
Tkinter与Qt混合架构:汽车制造数据看板与监控平台实战

Tkinter与Qt混合架构:汽车制造数据看板与监控平台实战

简介:面向汽车制造业工程师、管理人员及Python开发者的集成化数据分析平台资源包,基于Tkinter与Qt框架开发,可运行于Windows、Linux、macOS等主流系统,聚焦生产效率提升与整车质量管控。平台整合效率数据、NVH半消音室测试、EOL产…

📅 2026/9/13 6:04:30
基于Dijkstra与时间窗的AGV调度MATLAB实现与冲突避免

基于Dijkstra与时间窗的AGV调度MATLAB实现与冲突避免

简介:基于时间窗规划与Dijkstra最短路径的AGV调度算法源码包,专为智能制造、物流仓储场景下的自动导引车路径规划与避碰调度而设计。项目包含完整MATLAB实现与全部测试数据,覆盖地图初始化、路径预规划、时间窗检测、路口冲突判定等关键模块&…

📅 2026/9/13 6:04:30
MORE NEWS

更多资讯

📰

多分类任务本质:从OCR文档识别到工业质检的决策标尺

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Slackforce Surfaces实战:在Slack中构建Salesforce互动报表

先说个我观察了很久的现象:很多团队把 Slack 用得很深,频道、工作流、机器人全都配齐了,但一碰到"看数据"这件事,所有人还是会习惯性地切到 Salesforce、打开 BI 工具、筛完条件截个图、再贴回聊天窗口里。你问他们为什…

📰

Turbo码MATLAB仿真:SOVA与LogMAP解码器实现及误码率分析

简介:压缩包内含完整Turbo码编译码MATLAB代码,基于SOVA与LogMAP两种典型解码算法实现,覆盖编码、交织、迭代解码与误码率统计全流程。代码结构清晰,面向通信专业学生、研究人员及系统设计者,适合用于理解Turbo码原理、…

📰

GitNexus 安装排障手册:30 秒定位 4 个高频报错,一行命令修复

GitNexus 安装排障手册:30 秒定位 4 个高频报错,一行命令修复 【免费下载链接】GitNexus GitNexus: The Zero-Server Code Intelligence Engine 项目地址: https://gitcode.com/GitHub_Trending/gi/GitNexus GitNexus 是纯本地运行的代码知识图谱…

📰

HttpAsyncClient重试机制:5xx可重试、4xx不可重试的判定与实战

先说明一个很多人容易搞混的点:HttpAsyncClient里的“可重试异常”和 HTTP 状态码(5xx/4xx)并没有直接画等号。5xx/4xx是服务端返回的响应状态行,只有在服务端已经成功收到请求并给出响应之后才会出现;而HttpAsyncClie…

📰

一次本地修补解锁 Wand 远程手机操控与 Pro 功能:Wand-Enhancer 免费上手指南

一次本地修补解锁 Wand 远程手机操控与 Pro 功能:Wand-Enhancer 免费上手指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enh…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬