OpenProject 15.0.2 版本发布解析SAML 注册限制与 OIDC 作用域等九项缺陷修复详解【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 15.0.2 是发布于 2024 年 11 月 20 日的补丁版本聚焦于稳定性与缺陷修复官方明确建议所有用户升级到该版本。本指南将逐条拆解本次发布包含的九项 Bugfix并结合本仓库源码说明其底层实现尤其是 SAMLlimit_self_registration与 OpenID Connect 自定义 scopes 两条修复链路帮助读者理解每条修复的影响面、验证方式与升级价值。版本概览与升级建议项目说明版本号15.0.2发布日期2024-11-20版本性质缺陷修复Bugfix版本升级建议官方推荐升级至最新版本见 docs/release-notes/15/15-0-2/README.md15.0.2 不引入新功能特性而是针对 15.0 主线中暴露的一系列问题做收敛修复。修复范围横跨**工作包活动流、前端交互、文件存储Storages与身份认证SAML / OpenID Connect**四大领域其中身份认证相关修复共 5 项占半数以上直接关系到企业级部署中单点登录的可用性是本版本升级价值最大的部分。工作包与前端交互类修复4 项聚合包含评论时工作包创建事件不显示修复编号Bugfix #58738问题表现当工作包活动流Activity/Journal的聚合设置中包含评论时工作包的创建事件无法在活动流中正常展示。源码依据该问题涉及工作包活动流的聚合aggregation逻辑。OpenProject 通过 Journal 机制记录工作包的全部变更活动流在渲染时会对相邻时间内的变更做聚合展示聚合规则需要同时正确处理评论Comment与创建Creation事件。当聚合条件包含评论时创建事件的展示分支被遗漏从而出现创建记录消失的现象。本次修复后无论聚合中是否包含评论创建事件都会独立、完整地呈现。错误提示 Toast 出现 500 而无详细信息修复编号Bugfix #59065问题表现部分操作失败时界面错误 Toast 直接展示 HTTP 500 状态码却没有携带任何可供排查的细节信息导致管理员与用户无法判断失败原因。修复价值该修复旨在改善错误信息的可读性与可诊断性使 Toast 至少能够呈现可操作的错误摘要降低排障成本。涉及前端错误处理链路见 frontend/src 下错误提示相关实现。评论框提交后保持打开且不失去焦点修复编号Bugfix #59279问题表现用户提交评论后评论输入框仍然保持打开状态、焦点未移除容易造成重复提交或误以为提交失败的错觉。修复价值改进提交后的交互状态管理提交完成后评论框应正常收起并释放焦点属于典型的表单生命周期submit 后 reset/blur缺陷修复。列表视图跳转分屏活动标签时滚动位置错误修复编号Bugfix #59281问题表现从列表视图打开工作包分屏Split Screen并切换到活动Activity标签页时页面没有滚动到正确的位置用户需要手动滚动才能看到目标活动。修复价值修正分屏视图下活动标签页的锚点定位与滚动行为属于前端视图滚动位置计算类缺陷修复。文件存储复制项目后 Project Folder 设置丢失修复编号Bugfix #59344问题表现当用户复制Copy一个项目时复制出的项目中所包含的文件存储Storages如 Nextcloud没有继承源项目正确的Project Folder项目文件夹设置导致新项目无法直接使用既定的文件夹结构。修复价值项目复制流程必须完整迁移文件存储关联及其项目文件夹配置。文件存储模块的存储管理、项目存储关联ProjectStorage与项目文件夹Project Folder配置相关实现位于 modules/storages其包含项目存储的 active/automatic 状态、project_folder_id等字段与校验逻辑本次修复确保复制动作按源项目配置重建文件夹关联。身份认证类修复5 项本版本最值得关注的是围绕SAML 提供方的limit_self_registration限制自助注册展开的三连修复以及 OpenID Connect 自定义 scopes 的修复它们共同补齐了第三方登录配置在管理界面与迁移过程中的一致性短板。SAML无法修改 limit_self_registration修复编号Bugfix #59370问题表现管理员在 SAML 提供方配置界面保存时limit_self_registration字段的修改无法被提交并持久化。源码依据该字段属于 SAML 提供方模型Saml::Provider的顶层属性而非options存储内的子属性。从源码可以看到其提交与校验链路是独立的控制器参数白名单明确放行了该字段modules/auth_saml/app/controllers/saml/providers_controller.rb 中permit(:display_name, :limit_self_registration, *Saml::Provider.stored_attributes[:options])即limit_self_registration与options存储属性并列允许契约层将limit_self_registration声明为独立属性modules/auth_saml/app/contracts/saml/providers/base_contract.rb配置表单为其渲染专用开关控件modules/auth_saml/app/forms/saml/providers/configuration_form.rb。修复前该字段在部分更新场景下会被丢弃修复后管理界面的修改可正常生效。SAMLlimit_self_registration 配置未被实际遵守修复编号Bugfix #59375问题表现即使管理员为 SAML 提供方设置了limit_self_registration登录流程中该限制也没有被真正执行。源码依据该配置在配置映射阶段被显式处理为布尔值。在 modules/auth_saml/app/services/saml/configuration_mapper.rb 的call!方法中def call! options mapped_options(configuration.deep_stringify_keys) { options options, slug options.delete(name), limit_self_registration ActiveModel::Type::Boolean.new.cast(options.delete(limit_self_registration)), display_name options.delete(display_name) || SAML }.compact end可以看到limit_self_registration从原始配置中取出后经ActiveModel::Type::Boolean转换为真正的布尔值再作为顶层字段写入提供方记录。同时 modules/auth_saml/app/models/saml/provider/hash_builder.rb 在哈希构建用于登录回调认证决策时也会携带该值。修复确保该布尔开关在登录/注册决策链路中被真正读取与执行而非仅仅被存储。SAML迁移不保留 limit_self_registration修复编号Bugfix #59403问题表现通过迁移如从旧版配置迁移、或从环境变量种子导入创建的 SAML 提供方其limit_self_registration设置会丢失。源码依据上述ConfigurationMapper正是迁移与种子导入场景使用的配置映射器。修复前映射过程对limit_self_registration的处理存在缺口导致迁移后该字段为空修复后call!输出结构中显式包含该键见上文代码片段并以.compact在空值时安全省略保证迁移前后配置语义一致。相关的迁移行为在 modules/auth_saml/spec/services/saml/configuration_mapper_spec.rb 中有对应测试覆盖。OpenID Connect允许设置自定义 scopes修复编号Bugfix #59430问题表现OpenID ConnectOIDC提供方此前无法自定义请求的 scopes授权范围导致部分身份提供方要求的自定义 scope如组织专属权限声明无法获取。源码依据OpenID Connect 提供方模型modules/openid_connect/app/models/openid_connect/provider.rb通过store_attribute将scope存储为options内的字符串属性并带有默认值store_attribute :options, :scope, :string, default: openid email profile同时提供将 scope 字符串切分为数组的访问器def scopes (scope || ).split end修复后管理员可以在提供方配置中自由覆盖 scope 值例如追加offline_access或自定义 scopescopes方法会按空格切分后用于 OIDC 授权请求当值为空时安全回退为[]。由于默认值为openid email profile未做修改的既有配置行为保持不变不存在兼容性回退问题。完整变更清单以下为本版本全部缺陷修复的汇总表编号与官方跟踪系统对应编号类型修复内容所属模块#58738Bugfix聚合包含评论时工作包创建事件不显示工作包活动流#59065Bugfix错误 Toast 只显示 500 而无详细信息前端错误处理#59279Bugfix评论框提交后保持打开且不失去焦点前端交互#59281Bugfix分屏活动标签从列表视图跳转时滚动位置错误分屏视图#59344Bugfix复制项目后存储的 Project Folder 设置不正确文件存储Storages#59370Bugfix无法修改 SAML 提供方的 limit_self_registration身份认证SAML#59375BugfixSAML 提供方的 limit_self_registration 未被执行身份认证SAML#59403BugfixSAML 提供方迁移不保留 limit_self_registration身份认证SAML#59430BugfixOpenID Connect 无法设置自定义 scopes身份认证OIDC结语OpenProject 15.0.2 作为 15.0 主线的首个补丁迭代核心价值在于修复了身份认证配置的一致性SAML 注册限制的保存、执行与迁移三处断层以及 OIDC 自定义 scopes 的能力缺口同时清理了工作包活动流、分屏视图与错误提示等日常高频路径上的交互问题。对于已部署 15.0 的环境建议参照官方建议升级至该版本以获得上述全部修复身份认证相关改动可从 modules/auth_saml 与 modules/openid_connect 两个模块的源码与测试用例中进一步追溯验证。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考