十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenProject 新建项目默认配置:项目可见性、默认模块与创建者角色一次讲清

OpenProject 新建项目默认配置:项目可见性、默认模块与创建者角色一次讲清 OpenProject 新建项目默认配置项目可见性、默认模块与创建者角色一次讲清【免费下载链接】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在 OpenProject 中Administration settings → Projects → New project管理设置 → 项目 → 新建项目是实例管理员用来定义项目创建时刻自动生效的默认值的核心入口它决定新项目默认是公开还是私有、创建时自动启用哪些功能模块、非管理员用户创建项目后自动获得哪个项目级角色以及创建项目后是否向创建者发送确认通知。读完本文你将掌握这组默认配置的每一项语义、保存后的生效边界只影响之后创建的项目以及从源码层面理解这些默认值是如何在 SetAttributesService 中落地到新项目记录上的。适用场景与生效范围这组设置面向实例管理员instance administrator用于统一组织内所有新项目的初始形态。根据官方文档说明在该页面所做的更改是全局的作用于整个实例变更只影响设置保存之后创建的项目已存在项目的配置不受影响、不会被回写。这一点在源码中得到印证默认值不是写在设置页保存时刻而是在每个新项目走创建流程时由 app/services/projects/set_attributes_service.rb 的set_default_attributes方法在记录初始化阶段按需读取Setting并填充因此天然只作用于新建这一时点。设置项一新项目默认公开New projects are public by default复选框New projects are public by default控制新项目的默认可见性启用Enabled项目创建后默认为 public公开。公开项目对其中的用户按全局权限可见禁用Disabled项目创建后默认为 private私有需要由项目管理员显式改为公开。从源码看该选项对应设置键default_projects_public在 new_project_settings_form.rb 中以f.check_box(name: :default_projects_public)定义界面文案来自 config/locales/en.yml 中的setting_default_projects_public: New projects are public by default。创建项目时的取值逻辑在 set_attributes_service.rbdef set_default_public(provided) model.public Setting.default_projects_public? unless provided end可以看到一个关键细节只有当调用方没有显式提供public属性时才会回退到该全局设置。也就是说API 或创建向导中显式传入的可见性优先级更高此设置仅作为未指定时的兜底默认值。设置项二新建项目默认启用的模块Default enabled modulesDefault enabled modules for new projects定义项目创建时自动激活哪些项目模块如工作包、时间跟踪、文档等勾选的模块会默认启用于所有新建项目项目管理员之后仍可随时在项目设置中增减模块可用性该默认值不具锁定性。表单实现上这一组复选框并非硬编码而是动态枚举实例中当前可用的全部项目模块f.check_box_group(name: :default_projects_modules) do |check_box_group| OpenProject::AccessControl.available_project_modules(sorted: true).each do |m| check_box_group.check_box(value: m.to_s, label: I18n.t(project_module_#{m}, default: m.to_s.humanize), checked: Setting.default_projects_modules.include?(m.to_s)) end end见 new_project_settings_form.rb。这意味着插件/模块装得越多此处的勾选项越多且标签随语言包本地化。落库时由 set_default_module_names 完成def set_default_module_names(provided) model.enabled_module_names Setting.default_projects_modules if !provided model.enabled_module_names.empty? end即同样遵循调用方未提供且模型尚未指定模块时才应用默认列表的原则保证从模板复制或 API 显式指定的模块集合不被覆盖。设置项三授予非管理员创建者的角色Role given to a non-admin user who creates a projectRole given to a non-admin user who creates a project指定当一个非实例管理员用户创建项目后该用户在该项目中自动获得哪个项目级角色。官方文档标注其默认值为Project admin所分配的角色决定了创建者创建项目立即可执行的权限集合。从源码结构看该选项对应设置键new_project_user_role_id其下拉候选项并非所有角色而是经过 new_project_settings_form.rb 中两层过滤的可分配角色首先列出ProjectRole.assignable_to_project_creator命中的角色——从命名与调用可以推断这是要求角色具备创建者所需关键权限的过滤条件若管理员当前配置的角色已不再满足该条件例如后来删掉了角色的必要权限它仍会被保留在下拉框中并追加label_role_missing_permissions的标签后缀同时要求该角色仍在ProjectRole.givable可分配范围内。这一设计避免了角色被降级后设置项静默失效、管理员无从察觉的问题——现有配置始终可见、可修正。相关行为有专门的功能级测试覆盖见 edit_default_role_warning_spec.rb非管理员创建项目时该角色是否被正确授予则由 global_create_project_spec.rb 等特性测试验证。设置项四新建项目通知New project notificationsNotifications标签页控制项目创建后是否向创建者发送确认通知启用后创建者会收到一条确认项目创建成功的通知并可自定义通知正文。对应源码为 new_project_notifications_form.rb包含两个设置键new_project_send_confirmation_email总开关决定是否发送确认邮件new_project_notification_text富文本编辑的通知正文必填未保存过自定义文本时回退到语言包默认文案admin.settings.new_project.notification_text_default。表单中还有一处前端联动细节值得注意富文本输入框通过 Stimulus 的show-when-checked-target数据属性与总开关绑定源码开关未勾选时正文编辑区隐藏d-none既节省界面空间也从交互上表达通知文本仅在开关打开时生效。实际发送由 project_mailer.rb 承担其行为在 project_mailer_spec.rb 中有针对创建成功确认邮件的断言。创建时刻的完整默认值链路理解New project设置的最佳方式是把它们放回项目创建的初始化链路中。set_attributes_service.rb 的set_default_attributes在一次创建中统一处理多项默认值默认值设置来源应用条件可见性publicSetting.default_projects_public?调用方未显式提供public启用模块enabled_module_namesSetting.default_projects_modules未提供且当前为空Wiki 初始页Setting.default_projects_wiki?模型尚无 Wiki 记录项目类型project_typesTypeVariant.enabled_in_new_projects未提供且尚无项目类型工作包自定义字段已应用类型变体绑定的字段未显式提供时按变体推导从源码结构看除文档列出的三项外Wiki 默认、项目类型默认以及工作包自定义字段默认也走同一条未提供才回填的链路。这说明 OpenProject 的设计约定是全局默认值一律让位于创建请求中的显式输入设置页只是填补空位的最后一环。整条链路的服务层行为由 set_attributes_service_spec.rb 覆盖设置页本身的读写包括权限约束仅管理员可改由 new_project_settings_controller_spec.rb 验证。小结与操作建议修改New project设置后务必点击Save改动即时全局生效但仅约束此后创建的项目若组织要求新项目默认私有 最小模块集应关闭default_projects_public并精简模块勾选创建者角色可保留 Project admin 以便创建者完成初始配置若担心创建者越权可在角色管理中调整创建者角色的权限随后回到该设置页确认下拉框中该角色的权限不足提示再改选更保守的角色需要审计某项默认值为何未生效时优先检查创建请求是否显式传入了对应字段——按上述未提供才回填规则显式输入永远优先于全局默认。【免费下载链接】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),仅供参考
返回列表