用户组现在可以直接持有项目角色

管理几十个项目的访问权限,不再需要逐个添加和移除用户。在 管理 → 用户组 下创建一个用户组,把人加进去,然后像给单个用户授权一样,为该用户组授予项目角色。组内所有人立即获得这些角色。之后有人加入用户组,就自动获得访问权限;离开用户组,权限随之消失。项目的成员标签页会把用户组和用户并列显示,展开用户组行可以看到它覆盖了哪些人,以及其中哪些人只能通过这个用户组访问该项目。

一个人自己的角色和所属各用户组的角色会合并计算,所以他既可以直接拥有某些项目的访问权限,也可以同时属于访问级别不同的多个用户组。删除用户组时,系统会提前告诉你有多少人会失去访问权限、涉及多少个项目;凡是直接持有该角色或通过其他用户组持有该角色的人,权限保持不变。

公开项目可以允许访客无需登录即可阅读

如果你有一些公开项目更像文档站或公开的缺陷追踪系统,现在可以让它们对任何人只读开放,无论对方是否有账号。该功能默认关闭,而且需要两个独立的决定:管理员先在 管理 → 设置 中打开实例级总开关,再在具体项目的设置中逐个启用。

打开总开关时,管理员需要确认将变为可读的项目的完整列表。如果这段时间里列表发生了变化,确认会被拒绝并重新显示,因此你不会误把错误的项目开放出去。

之后访客无需登录即可打开项目列表、项目概览、工作项(Issue)列表、单个工作项、维基(Wiki)以及搜索。其他一切仍然需要账号,MCP 也仍然只接受 API 密钥。访客只能看到人员的显示名称,永远看不到私有工作项、私有备注和附件。私有、已归档或未启用该功能的项目保持不可见,而且所有拒绝响应看起来完全一样,无法借此探测哪些项目存在。匿名访问只读、按 IP 限速,并且永不缓存。两处设置的每一次变更都会写入安全审计日志。

用户可以自己修改密码

此前修改密码的唯一途径是邮件里的重置链接。现在已登录用户可以在偏好设置中直接修改。系统会先校验当前密码。你的其他会话会被退出登录,但当前正在使用的会话保持登录状态。错误尝试会被限速并记入审计日志,且不计入账号锁定次数,因此持有被窃取会话的人无法把真正的账号所有者锁在门外。

管理员可以要求用户下次登录时修改密码

创建账号或重置密码时,管理员现在可以要求该用户在下次登录时自行设置密码。在完成之前,用户只能看到修改密码页面。API 密钥不受影响,所以智能体的密钥继续可用;服务账户上也无法设置此标记。

Redmine 导入工具现在把用户组按用户组导入

在 Specivo 0.7.0 中,Redmine 的用户组会被拆成每个成员各自的角色授权,每人每项目一条。从 0.8.0 开始,一个 Redmine 用户组会变成一个真正的 Specivo 用户组,成员相同,用户组持有的角色也仍然是由用户组持有的一条授权。这样结构保持完整,访问管理也更清晰。

如果用户组名称已被占用,或者两个 Redmine 用户组仅大小写不同,新用户组会加上后缀,并在报告中列出。已有的用户组永远不会被复用,否则会造成意外的访问授权。

如果你正在考虑用 Specivo 替代 Redmine,从 Redmine 迁移指南介绍了导入工具会迁移哪些内容、哪些内容会如实报告而非猜测,以及如何对你自己的实例运行它。

安全修复

工作项自动补全不再泄露私有工作项。此前任何项目成员都能通过自动补全看到项目中每个工作项的编号和主题,包括他们无权打开的私有工作项。现在自动补全采用与工作项列表相同的可见性规则。拥有任何角色(包括内置角色)的成员都曾受此影响。

搜索遵循角色权限。自定义角色缺少查看工作项权限的成员,通过 API 访问工作项会被拒绝,却仍能从搜索结果中看到其主题和描述片段。此前搜索还会向一个未授予任何权限的角色返回全部维基页面。现在搜索检查的权限与应用其他部分一致。只有自定义角色受影响。

私有子项目不再出现在父项目页面上。此前任何能打开某项目的已登录用户都能看到它所有子项目的名称,包括无权打开的私有子项目。现在概览只显示读者可以访问的子项目。管理员仍然像以前一样看到全部子项目。

关联现在需要相应权限。此前 REST API 允许任何能读取两个工作项的人把它们关联起来,完全没有权限检查。删除也一样:某个项目的成员可以删除从该项目工作项指向别处私有工作项的关联。现在两者都需要管理工作项关联权限,与 MCP 工具一直以来的做法一致。内置的 Manager(管理者)、Developer(开发者)和 Agent(代理)角色带有此权限。拥有编辑工作项但没有管理工作项关联的自定义角色,不能再添加或移除关联。

升级时需要检查什么

由于访问权限现在完全由角色决定,自定义角色缺少查看工作项的成员将在所有地方失去对工作项的访问,包括搜索、自动补全和 MCP。内置角色均不受影响。如果你有自定义角色,请在升级前检查它们的权限。

公开项目的已登录非成员,现在在工作项列表已经放行的所有地方(冲刺、版本、重复模板、表情回应、MCP)都能通过查看工作项检查。已登录非成员不再能在搜索中看到公开项目的维基页面。打开项目维基时,除非读者有管理维基的权限,否则不再自动创建首页。私有备注不再出现在评论搜索中,管理员除外。

添加或移除关联现在需要管理工作项关联权限,没有该权限的自定义角色将失去这一能力。没有该权限的人看不到关联操作控件。

MCP 工具 specivo_remove_relation 只会移除附在 issue_ref 所指工作项上的关联;传入属于其他工作项的关联 ID 会返回未找到。

迁移说明:如果已有账号正在使用登录名 $anonymous,升级会停止并给出说明。这是预留给匿名用户的账号。如果你有这样的账号,请在升级前重命名。升级前请先备份实例。

翻译

界面中许多交互部分的提示、确认框和占位文字,此前即使在已翻译的页面上也仍是英文,而用户组、成员、标签和修改密码等新页面则完全没有翻译。现在西班牙语、法语、俄语、泰语和中文已重新补全,界面会跟随你选择的语言显示。

如何获取

运行 docker pull specivo/specivo:0.8.0 拉取 Docker 镜像。对于无法访问互联网的服务器,GitHub Release 中附带了离线安装包。安装和升级步骤请参阅用户指南。