命名空间与团队管理
功能描述
命名空间(Namespace)是 SkillHub 的核心组织单元。每个命名空间代表一个团队或项目,拥有独立的成员、权限和技能包。

命名空间的作用:
- 隔离:不同团队的技能包互不干扰
- 权限:基于角色的访问控制(RBAC)
- 协作:团队成员可以共同管理技能包
- 治理:管理员可以审核、归档、冻结技能包
角色体系:
| 角色 | 权限 |
|---|---|
| Owner | 完全控制,包括删除命名空间、管理所有成员 |
| Admin | 管理成员、审核技能包、修改设置 |
| Member | 发布技能包、查看私有技能包 |
命名空间状态:
- Active:正常运行
- Frozen:冻结状态,无法发布新技能包
- Archived:归档状态,从搜索结果中隐藏
使用场景
场景一:创建团队命名空间
团队负责人创建一个新的命名空间,用于管理团队的技能包。

场景二:添加团队成员
管理员邀请新成员加入命名空间,分配合适的角色。

场景三:权限管理
调整成员角色,控制谁可以发布、审核、管理技能包。
场景四:命名空间冻结
发现命名空间有安全问题,临时冻结所有发布操作。
使用步骤
创建命名空间:
- 访问
/dashboard/namespaces - 点击「创建命名空间」
- 填写信息:
- 名称:团队名称(例如 "iFlytek AI Team")
- Slug:URL 标识符(例如 "iflytek")
- 描述:简要说明团队职责和技能包范围

- 提交创建,系统自动将你设为 Owner
添加成员:
- 进入命名空间详情页
- 点击「成员」标签
- 点击「添加成员」
- 搜索用户(支持按用户名、邮箱搜索)
- 选择角色(Owner / Admin / Member)
- 确认添加
通过链接邀请成员:
- Owner 或 Admin 在处于 ACTIVE 状态的团队空间「成员」页点击「邀请成员」。
- 复制链接并安全地发给要加入的人。链接 24 小时内有效,只能由一名尚未加入的用户使用一次。
- 对方先按现有登录及账号准入规则进入 SkillHub。打开链接后会看到目标空间、当前账号和 MEMBER 权限;点击「确认加入」才会成为成员。
- 如需提前失效,点击「作废邀请」。重新生成链接时,页面会要求确认旧链接立即失效;已加入的成员不受影响。
邀请链接是持有者可用的加入凭证,不限定邮箱或账号。不要在公开频道分享。登录回跳不会携带邀请 Token;同一浏览器标签页会暂存链接直到确认、已加入或确认失效。
管理权限:
- 在成员列表中找到目标用户
- 点击「修改角色」
- 选择新角色并确认
- 系统会记录权限变更到审计日志
冻结命名空间:
- 进入命名空间设置
- 点击「冻结命名空间」
- 填写冻结原因(可选)
- 确认冻结
冻结后,命名空间内的所有技能包无法发布新版本,但已有版本仍可下载。
成员被移除后,技能如何处理
移除成员不会删除、迁移或转让他的技能。技能地址、历史版本和所有者保持不变,已发布内容继续按原可见范围提供。
账号正常的当前技能所有者仍可在“我的技能”查看和下载自己的内容,包括私有内容、草稿和历史版本;页面会提示“已不在该空间,只能查看和下载”。不能继续上传、重新发布、改头像、改可见范围、撤回申请、归档或删除技能。其他成员的内部内容不因这项例外对他开放。
重新加入且仍为技能所有者时,按原规则恢复维护权限。如果账号被停用,则不能以该账号查看或操作;重新启用不会自动恢复已移除的空间成员关系。此前已提交的审核申请仍由有权审核人按原流程处理,不自动通过或撤回。
空间及平台管理员保留原有治理、审核权限,但成员移除不会自动为技能指定接任者。本期没有新增技能转让、自助退出或永久注销账号功能。
API 接口
创建命名空间:
POST /api/v1/namespaces
Content-Type: application/json
{
"name": "iFlytek AI Team",
"slug": "iflytek",
"description": "iFlytek's AI agent skills"
}参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| name | string | 命名空间名称(必需,2-50 字符) |
| slug | string | URL 标识符(必需,唯一,2-64 字符,只能包含小写字母、数字、连字符) |
| description | string | 描述(可选,最多 500 字符) |
获取命名空间详情:
GET /api/v1/namespaces/{slug}更新命名空间:
PUT /api/v1/namespaces/{slug}
Content-Type: application/json
{
"name": "iFlytek AI Team (Updated)",
"description": "Updated description"
}添加成员:
POST /api/v1/namespaces/{slug}/members
Content-Type: application/json
{
"userId": "user-123",
"role": "MEMBER"
}更新成员角色:
PUT /api/v1/namespaces/{slug}/members/{userId}/role
Content-Type: application/json
{
"role": "ADMIN"
}移除成员:
DELETE /api/v1/namespaces/{slug}/members/{userId}冻结命名空间:
POST /api/v1/namespaces/{slug}/freeze
Content-Type: application/json
{
"reason": "Security investigation"
}解冻命名空间:
POST /api/v1/namespaces/{slug}/unfreeze邀请成员与邀请记录
团队空间的 Owner/Admin 可在“成员 → 邀请成员”生成24小时有效、仅一名新成员可使用的链接。对方须先登录并通过平台准入,再确认加入;仅打开链接不会自动成为成员。替换有效链接和作废须确认,已加入成员不受影响。
新链接采用 /join#invite=邀请码。创建人的同一账号、同一浏览器标签页会暂存链接;刷新页面后重新打开邀请弹窗,系统校验它仍是当前有效邀请后可继续复制。换账号、换标签页或换设备不能依靠这份暂存恢复原链接,邀请历史也不返回邀请码;如果没有保存原链接,需要创建新邀请,并在替换前确认旧链接失效。
弹窗下方直接展示分页邀请记录(网页每页5条,列表最高240px):创建人及时间、到期时间、状态,以及实际加入账号与时间。人员优先显示记录时保存的姓名,完整账号ID放在悬停提示;无姓名时显示短标识。每次生成独立记录,替换、作废、过期和成员离开不会抹掉原历史。历史不能恢复失效链接,也不代表当前成员资格。普通成员和仅有平台角色的账号不能查看,冻结/归档空间的 Owner/Admin 可查看只读历史。
升级只迁入可以准确读取的当前邀请并标记“旧记录”,不推测更早链接的使用情况。空间存在期间保留历史,彻底删除空间时删除邀请业务记录,既有操作审计按原规则保留。
历史查询使用浏览器 Session:GET /api/v1/namespaces/{slug}/invitations/history?page=0&size=10,每页1–50条,不返回邀请码或哈希。
注意事项
Slug 唯一性:命名空间 slug 在全局范围内必须唯一,且创建后不可修改。建议使用团队或项目的简短标识符。
- Owner 权限:每个命名空间至少需要一个 Owner,最后一个 Owner 无法被移除
- 角色继承:命名空间成员自动拥有该命名空间下所有技能包的访问权限
- 冻结机制:管理员可以冻结命名空间,冻结后无法发布新技能包
- 归档机制:归档的命名空间会从搜索结果中隐藏,但已有技能包仍可访问
- 审计日志:所有成员变更、权限调整都会记录到审计日志