Core · 使用插件 · 用户与认证

用户管理

提供的能力

@nocobase/app-plugin-users 提供用户查询、账号管理、邀请和个人偏好能力。登录身份、密码和会话由身份认证提供,用户管理复用这些数据;角色与操作权限由权限管理及应用业务定义。

插件提供邀请接受页;用户列表、管理表单和业务角色范围由应用接入。

使用场景与示例

示例:邀请成员加入应用

  1. 在应用的用户管理页选择邀请,填写邮箱及允许分配的角色。
  2. 创建邀请后检查每个地址的处理结果;有权获取链接的邀请者可复制返回的 inviteUrl。
  3. 接收者打开邀请页。新用户填写姓名和密码;已有用户使用被邀请的邮箱登录后接受。
  4. 在用户列表中检查账号及角色,再用该用户验证业务访问范围。

邀请邮件依赖可用的邮件投递配置。邮件发送失败不等于邀请创建失败;按响应判断是否可以转发邀请链接。重新生成链接会使旧链接失效。系统邀请邮件使用通知投递能力,不要求接入用户邮箱。

开发提示词(交给当前应用目录中的 Coding Agent):

纯文本
请使用用户管理插件,为现有应用接入成员管理和邀请。
复用 UsersClient 与已有认证、权限配置,提供用户列表、邀请和角色选择。
角色只能从允许分配的选项中选择,显示每个邀请的处理结果。
保留已有用户和权限;用普通成员验证管理操作被拒绝,用受邀账号验证加入结果。

完成标志:受邀成员能加入并获得指定角色;普通成员不能调用管理接口。

重要原理与实现

以下是实现本例时的接入位置与预期界面变化;它们是开发说明,具体文件名沿用当前应用结构。

接入位置代码或配置变化界面与行为变化
客户端路由和成员页面接入 UsersClient,增加列表、邀请和角色选项管理员有操作入口,受邀者使用插件邀请页
服务端角色范围配置按业务接入角色范围及管理授权可分配角色与后台规则一致
语言资源与测试补齐邀请结果、禁用等文案和验证失败结果可见,原有账号行为可回归

接入与入口

在 Client 和 Server 注册插件,并将身份认证、权限管理放在它之前,执行应用的数据库迁移。通用操作见管理插件。

插件只直接注册邀请接受页 /invite/:token。用户列表和管理页面由应用接入,可以复用 @nocobase/app-plugin-users/client/user-client 导出的 UsersClient。这里及下文的页面和 API 路径均相对于应用挂载路径;例如 /main 下的邀请页为 /main/invite/:token。

管理用户

需要完成的操作公开能力
查找用户分页列表,按名称、用户名、邮箱、状态及角色筛选
编辑账号创建用户,修改名称、用户名、邮箱,启用或停用账号
管理访问分配角色,重置密码,撤销会话
邀请加入创建邀请、重发、撤销及接受邀请
保存个人设置用个人偏好接口保存主题、语言等应用定义的值

管理 API 位于 /api/users。调用者需要已登录,并拥有 user 资源相应操作权限;创建用户同时要求 create 和 assign-role。插件不会因为某个页面被展示就授予其访问权限。

应用从 UsersClient 读取角色选项,再提交允许分配的角色,不应自行假设所有角色都可修改。服务端通过 /server/tokens 的 userManagementServiceToken 复用管理服务,通过 userRoleScopeRegistryToken 接入业务自己的角色范围。

AI 开发的约束与验证

本插件的开发约束

  • 从允许分配的角色选项生成表单,接口仍检查 create 与 assign-role,不能通过隐藏选项替代授权。
  • 保留邀请逐地址结果,区分邀请已创建和邮件投递失败,避免盲目重复邀请。
  • 分别验证新账号接受、已有账号接受、旧链接失效及停用后的会话;删除不能当作物理清除用户历史。

个人偏好与使用边界

React 页面可从 /client/preferences 使用 useUserPreference(key, { defaultValue })。例如应用可用 theme.mode 保存主题选择;插件只保存值,不实现主题切换本身。

停用账号、撤销会话和删除账号有不同含义。删除要求明确确认,保留用于历史归属的禁用身份,原邮箱和用户名仍被占用;业务资源清理由应用的角色范围钩子处理。验证时同时检查普通用户被拒绝的管理操作,以及邀请、禁用和会话撤销后的实际登录状态。

相关文档:身份认证、API 密钥、权限管理。

上述检查是接入后的验收要求,不表示本文已完成运行验证。让 Agent 报告实际改动、执行过的检查和未验证项;项目指引、Skills 与通用检查流程见持续开发应用和测试。

源码依据:插件公开入口与实现。

NocoBase 文档助手

关于 NocoBase,你想了解什么?

每次提问独立回答,不会参考之前的问答。请提供完整背景。