ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

OpenProject 13.4.0 版本解析:GitLab 集成、ClamAV 病毒扫描与 WebAuthn 二次验证全面解读

OpenProject 13.4.0 版本解析:GitLab 集成、ClamAV 病毒扫描与 WebAuthn 二次验证全面解读 OpenProject 13.4.0 版本解析GitLab 集成、ClamAV 病毒扫描与 WebAuthn 二次验证全面解读【免费下载链接】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 13.4.0 于 2024-03-20 发布是继 13.3 之后的一次功能密集更新涵盖开源协作、企业安全与模块体验三大方向官方 GitLab 集成正式落地、上传文件支持 ClamAV 病毒扫描、WebAuthn/FIDO/U2F 硬件令牌成为新的二次验证方式同时自定义项目列表、动态会议模块和 PDF 导出能力均获得显著增强。本文以官方发布说明为骨架结合仓库源码深入讲解每项特性的原理、配置与升级要点帮助你在升级或评估 OpenProject 时准确把握 13.4 的完整能力边界。版本概览与升级建议OpenProject 13.4.0 的发布周期延续了每月一个大版本、持续滚动更新的节奏。官方在发布说明中明确recommend updating to the newest version即建议所有用户尽快升级。本次更新包含若干重要 bug 修复与多项新特性官方在 docs/release-notes/13/13-4-0/README.md 中将其总结为八个重点GitLab 集成由社区贡献者最初开发现正式官方化自定义项目列表的进阶功能Meetings 模块的进阶功能基于 ClamAV 的病毒扫描功能Enterprise 附加组件OAuth nudge 过程中的中间加载模态框PDF 导出支持表格单元格中的列表WebAuthn/FIDO/U2F 作为第二因素认证默认可用语言扩充至 50 种以上对于从 13.3.x 升级的管理员最需要注意的是 GitLab 插件迁移步骤见下文以及 13.3.1 中消失的rake secret任务在 13.4 中已恢复对应修复条目 #53447Rake secret task gone in 13.3.1避免你的自动化脚本在升级后失效。GitLab 集成从社区插件到官方功能集成背景与数据模型兼容性GitLab 集成是 13.4 最具代表性的社区驱动特性。它起源于社区贡献者 Benjamin Tey 三年前创建的插件13.4 将其正式官方化。通过该集成用户可以在 OpenProject 内部直接管理 GitLab 的工作单元merge request 和 issue将其与工作包work package建立关联实现研发交付与项目管理的数据打通。官方特别强调从用户插件迁移到官方集成不会影响历史数据因为there were no changes to the data model——数据模型没有发生变化。从当前仓库的模块结构可以印证这一点modules/gitlab_integration 下的模型层定义了gitlab_issue.rb、gitlab_merge_request.rb、gitlab_pipeline.rb、gitlab_user.rb四个核心模型见 modules/gitlab_integration/app/models它们负责把 GitLab 侧的实体映射为 OpenProject 内可关联的对象。从社区插件升级的迁移步骤如果你此前使用了用户自建的 GitLab 插件btey/openproject-gitlab-integration升级前必须完成两步清理否则会触发Bundler::GemfileError错误信息形如Your Gemfile lists the gem openproject-gitlab_integration ( 0) more than once.清理 bundler 引用在Gemfile.lock和Gemfile.modules中移除 GitLab 集成的痕迹。Gemfile.modules是 OpenProject 用于按模块聚合 gem 依赖的入口文件见 Gemfile.modules残留条目会导致上述 bundler 报错。移除模块代码目录执行命令删除模块目录示例路径需替换为你的实际安装路径rm -rf /path/to/openproject/modules/gitlab_integration需要说明的是仓库当前保留的 modules/gitlab_integration 目录正是新版官方集成模块本身其内部结构admin/settings_controller.rb、settings_form.rb以及views/gitlab_integration/admin/settings/show.html.erb说明集成配置入口位于管理后台的 GitLab Integration 设置页管理员可以在该页面完成 GitLab 实例的连接配置而workers/cron/clear_old_merge_requests_job.rb则表明系统会通过后台定时任务清理过期的 merge request 缓存数据。若你的环境中该目录仍为旧插件代码则按上述步骤删除后由 13.4 官方模块接管。系统管理员的配置入口集成配置的官方说明位于 docs/system-admin-guide/integrations/gitlab-integration。从源码看管理端界面由 页面头部组件 与 设置表单 组成为后续 13.4 版本的 GitLab 集成运维提供了标准化的配置路径。此外13.4 还修复了 Incorrect spelling of GitLab module under project settings#53434即项目设置中 GitLab 模块名称拼写错误的问题这属于迁移到官方模块后的小型界面修正。自定义项目列表列管理与保存机制13.4 为自定义项目列表project lists引入了接近工作包列表的体验现在可以修改列的选中集合与排列顺序并将它们保存为一个新配置的视图。这意味着项目列表从固定列展示进化为可配置、可持久化的查询视图。配合这一能力UI 右上角会出现Save link保存提示当列表被修改后提醒用户保存视图避免离开页面时丢失工作。从实现细节看本次相关功能点还包括允许修改列的选择与顺序并持久化#51670项目列表中长文本字段截断、禁用展开操作#52127修改提示信息与另存为按钮#52152对不可预览文本的列截断优化#53203项目列表删除改用 primer modal 组件#53022列排序与持久化能力的底层基础设施可以追溯至仓库的查询排序实现app/models/query/sort_criteria.rb 中的排序标准处理逻辑如升序方向追加、空值处理等以及 app/models/query/manual_sorting.rb 中通过ordered_work_packages关联维护的手动排序机制。项目列表复用这套查询体系是它能够像工作包列表一样保存列配置的架构基础。本次功能由 City of Cologne科隆市赞助。Meetings 模块附件、议程复制与 .ics 参会人13.4 对动态会议dynamic meetings模块进行了三方面增强附件上传现在可以给动态会议附加文件如图片。附件将展示在会议详情中例如在会议说明旁插入图片附件。对应功能条目为 #26819Allow to attach files in the new (dynamic) meetings module。同时修复了复制会议时不复制附件的问题#53319确保新能力在复制场景下保持一致。议程项随会议复制复制动态会议时已有的议程项agenda items也会一并复制这对周期性会议recurring meetings来说极大节省了重复搭建议程的时间。对应条目为 #52578其中的journalized.rb与meeting_uid.rb等模块共同支撑会议的持久化与唯一标识为议程复制、系列会议追溯提供了模型基础。.ics 文件包含参会人信息会议的 .ics 下载文件现在包含动态会议的参会人信息同时保留已有的 PARTSTAT 等信息。这让用户可以直接在日历软件中确认或拒绝会议邀请而无需回到 OpenProject 操作。对应条目为 #33158 提供ics_download_path会根据会议类型路由到download_ics_project_meeting_path单次会议或download_ics_project_recurring_meeting_path系列会议携带occurrence_id指定具体场次row_component.rb 中列表行同样提供该下载链接。另外本次还修复了葡萄牙语环境下动态会议超过 5 名用户无法打开的问题#53215以及会议页签上添加到会议按钮溢出#51747等缺陷。官方提示后续版本仍会持续增强 Meetings 模块。ClamAV 病毒扫描Enterprise 附加组件功能定位与启用条件数据安全是 13.4 的重要主题之一现在用户上传的文件可以通过ClamAV反病毒引擎进行病毒扫描。官方在系统管理指南中有专门章节docs/system-admin-guide/files/attachments/virus-scanning管理后台的附件菜单下新增了 Antivirus settings病毒扫描设置入口。从源码可以确认该功能是 Enterprise 付费能力设置页通过EnterpriseEdition::BannerComponent.new(:virus_scanning)展示推广横幅且模式下拉框在无权限时被禁用见 show.html.erb。启用与否的判定逻辑在 app/models/setting/virus_scanning.rb 中清晰可见class Setting module VirusScanning def self.enabled? Setting.antivirus_scan_available? Setting.antivirus_scan_mode ! :disabled EnterpriseToken.allows_to?(:virus_scanning) end end end即三个条件同时满足才算启用功能可用antivirus_scan_available?、扫描模式非 disabled、且当前 Enterprise Token 包含virus_scanning权限。管理界面配置项病毒扫描设置页位于管理后台由 virus_scanning_settings_controller.rb 提供路由支持核心表单提供以下配置项配置项取值说明Antivirus scan modedisabled/clamav_socket/clamav_host选择病毒扫描模式选择后表单会通过 Turbo Stream 动态刷新refresh-on-form-changes加载对应子表单ClamAV (Socket) 目标如/var/run/clamav/clamd.ctl通过 Unix socket 连接 clamd 守护进程ClamAV (Host) 目标如remotehost:1024通过 TCP host:port 连接远程 clamdAntivirus scan actionquarantine/delete检测到病毒后的处置动作隔离或删除设置项通过setting_select/setting_text_field与Setting.antivirus_*系列设置持久化见 _av_form.html.erb。其中隔离quarantine动作对应管理后台的被隔离附件列表页由 quarantined_attachments_controller.rb 与对应的 table_component.rb、row_component.rb 实现管理员可以查看并处置被隔离的文件。底层扫描实现核心服务是 app/services/attachments/clamav_service.rb其实现要点module Attachments class ClamAVService def initialize(scan_mode Setting.antivirus_scan_mode, connection_target Setting.antivirus_scan_target) options clamav_client_options(scan_mode, connection_target) clamav_client ClamAV::Client.new(**options) end def scan(attachment) file attachment.diskfile clamav_client.execute(ClamAV::Commands::InstreamCommand.new(file)) end def ping clamav_client.execute(ClamAV::Commands::PingCommand.new) end private def clamav_client_options(scan_mode, connection_target) case scan_mode when :clamav_socket { unix_socket: connection_target } when :clamav_host tcp_host, tcp_port connection_target.split(:) { tcp_host:, tcp_port: } else raise ArgumentError.new(Unknown clamav scan mode #{scan_mode}) end end end end扫描通过ClamAV::Commands::InstreamCommand将附件磁盘文件流式发送给 clamdping方法用于健康检查连接方式由扫描模式决定socket 模式使用 Unix socket 路径host 模式将目标字符串按:拆分为 TCP host 与 port。异步执行由 attachments/virus_scan_job.rb 这一后台任务承载因此上传扫描不会阻塞主请求路径。附件模型 attachment.rb 与病毒扫描状态集成共同构成上传 → 后台扫描 → 按动作隔离/删除的完整链路。对应功能条目为 #52909。OAuth nudge 中间加载模态框针对 OneDrive/SharePoint 等存储集成13.3 引入的 OAuth nudge 流程13.4 增加了一个中间加载模态框当重定向到存储服务商需要时间时管理员会看到加载提示避免界面卡住无响应的观感。对应条目为 #52605。同时本次更新还提升了无障碍accessibility能力通过屏幕阅读器传达 OAuth 登录的三种状态——已开始、进行中、已完成或失败让视障用户也能准确感知认证进度。PDF 导出支持表格单元格中的列表13.4 修复了 PDF 导出在表格单元格中包含列表时的渲染问题。现在导出一个描述字段中包含带列表的表格的工作包到 PDF列表会正确显示不再出现内容错乱或丢失。对应条目为 #52613 下 40 余个导出相关文件组成的导出模型体系支持 PDF、XLS 等格式的列配置与渲染管线列表渲染能力的修复提升了长文档导出的还原度。WebAuthn/FIDO/U2F 第二因素认证新认证方式的价值双因素认证2FA是数据安全的关键环节。13.4 为 OpenProject 新增了基于WebAuthn/FIDO/U2F标准的第二因素验证方式用户可以使用 Yubikey 等硬件令牌、浏览器或密码管理器生成的 passkey 完成二次认证摆脱对短信/邮箱验证码的依赖。对应功能条目为 #48743。源码实现位置该能力在独立的two_factor_authentication模块中实现modules/two_factor_authentication核心代码包括Relying Party 配置webauthn_relying_party.rb 负责 WebAuthn Relying Party 的初始化与校验参数设备模型device/webauthn.rb 定义 WebAuthn 设备如 Yubikey的持久化与凭据管理注册表单webauthn_device_form.rb 处理新设备注册注册与认证视图two_factor_devices/new.html.erb与authentication/request_otp.html.erb提供设备注册和认证交互界面。WebAuthn 设备作为TwoFactorAuthentication::Device的 subtype 与既有的 TOTP 方式共存用户可在我的账号 → 双因素设备中登记多个设备。本版本的移动端修复13.4 集中修复了 WebAuthn 在移动端的多个缺陷这些条目对 iOS/Android 用户至关重要WebAuthn 在移动端 Safari 上失败#53442WebAuth 在 iOS 上失败#53494WebAuthn 在移动端不可选择#53495可见 13.4 不仅引入了新认证方式还重点解决了移动端浏览器兼容性使 passkey/硬件令牌在手机 Safari 上可正常完成注册与验证。语言扩充与社区翻译13.4 将默认可用语言从不足十种扩充到50 种以上这是社区翻译长期积累的成果。需要注意官方声明目前仅英语、德语、法语、西班牙语四种语言由 OpenProject 官方正式审校更新其余语言依赖社区贡献者持续维护。本次还修复了葡萄牙语与巴西葡萄牙语的区分问题#53374两者现在被作为独立语言对待。官方特别感谢了本版本的翻译贡献者包括挪威语、繁体中文、立陶宛语、波兰语、捷克语等语种的译者。若你希望参与翻译官方指南位于 docs/contributions-guide/translate-openproject。翻译流程与社区协作机制可见 docs/contributions-guide 目录下的完整贡献指南。Bug 修复与变更清单13.4 除上述特性外还包含大量修复以下是按官方 release notes 归纳的关键条目编号为官方 work package ID工作包与团队规划修复团队规划中显示的被分配人数量被每页对象数错误限制的问题#46490修复 Baseline 变更列中优先级显示灰色圆点而状态不显示的问题#51379修复 Gantt 默认查询未翻译#52833修复 Gantt 图表页的 Atom feed 报错#53027修复共享对象我筛选器结果错误#53071修复多值自定义字段以is (AND)/is not过滤时受其他自定义字段值影响的问题#53198修复缺少查看工作包权限的用户在项目概览页看到错误提示的问题#33573导出、邮件与搜索修复导出自动下载不启动、下载链接显示延迟#40163修复复制 wiki 页面时图片与链接未更新到新页面#38319修复邮件标题使用实例默认语言而非用户指定语言#52976修复文档已添加邮件中的链接错误#53211修复搜索栏空白时不回弹、内部文字与栏色白色一致的问题#51682认证与用户管理修复 LDAP 可选属性未映射时无法创建用户#53327修复黑名单路由不生效#53399修复 13.3.1 中 rake secret 任务消失的问题#53447界面与项目修复公告框与创建新账号按钮在响应式布局下的问题#51949修复无法为入站邮件指定项目 key#52524修复自定义颜色设置未应用到项目创建按钮、绿色按钮不一致#52958修复工具提示与标题不一致、审批对话框文案歧义#53040修复页面编辑器菜单移动到页头下方#53365修复自动管理项目文件夹在主导航中的显示权限判断错误#53367修复时间与成本模块中无法删除报表#52284结语13.4 的定位综合来看13.4.0 是 OpenProject 在开源协作 企业安全双轴上的一次重要落地GitLab 集成证明社区贡献可以顺利官方化ClamAV 病毒扫描与 WebAuthn 第二因素把数据安全能力提升到企业级项目列表与会议模块的体验增强则持续打磨日常项目管理场景。对于正在使用旧版 GitLab 插件的用户请务必按本文步骤完成升级前清理对于企业用户建议评估病毒扫描的 socket/host 两种部署模式与隔离/删除两种处置策略并结合 docs/system-admin-guide/integrations/gitlab-integration 与 docs/system-admin-guide/files/attachments/virus-scanning 两份官方指南完成部署。【免费下载链接】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),仅供参考
返回列表