OpenProject Enterprise 云订阅管理升级、降级与取消操作完全指南【免费下载链接】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 Enterprise cloud edition 的订阅管理是企业管理员的核心运维场景之一。本文基于官方文档 Manage your OpenProject Enterprise cloud subscription系统梳理在系统后台Administration-Subscription页面中如何升级/降级用户席位、编辑账户与账单信息、更换支付方式以及取消订阅的完整操作流程并结合 OpenProject 开源仓库中与订阅、企业版令牌和用户数限制相关的源码实现帮助管理员理解订阅变更的生效规则按比例计费、下周期生效、数据保留策略及其在系统内部的落地机制。入口与权限在哪里管理订阅所有订阅相关的变更操作升级、降级、取消、修改地址或支付方式都在同一处入口发起登录 OpenProject 系统进入Administration系统管理-Subscription点击Manage subscription按钮。该入口由系统管理员可见订阅页面对应的管理界面要求具备管理员权限。在开源仓库中企业版相关管理页面如 on-premises 环境下的企业版令牌管理页同样受before_action :require_admin保护见 EnterpriseTokensControllerclass EnterpriseTokensController ApplicationController layout admin menu_item :enterprise before_action :require_admin before_action :check_user_limit, only: [:index] before_action :check_trial_status, only: [:index]说明Enterprisecloud云端实例的订阅托管在 OpenProject 云平台侧管理员在本实例的Administration - Subscription页面点击按钮后会跳转到云平台的订阅管理弹窗完成操作而 on-premises 部署则通过企业版令牌Enterprise token激活两套机制的入口不同但都集中在系统管理区。Manage subscription 弹窗的五大功能在弹出的Manage subscription覆盖窗口中可以选择以下操作功能说明升级、降级或取消订阅修改用户数或终止订阅详见下文编辑账户信息修改组织账户资料编辑账单/发货地址用于发票开具与寄送编辑或添加支付方式维护银行卡等支付信息查看账单历史与下载发票详见 Invoices for the OpenProject Enterprise cloud edition其中查看账单历史指向独立的发票与付款历史页面发票会通过邮件发送到订购时使用的邮箱发票上列有订阅计费周期、下次扣款日期与付款状态银行转账方式需在汇款时填写发票编号以便对账。升级或降级现有订阅操作流程在Manage subscriptions弹窗顶部点击列出的现有订阅点击Edit Subscription链接进入编辑界面。也可以走另一条更直接的入口在Administration - Subscription页面直接点击Upgrade subscription按钮。在编辑界面选择新的用户数界面上会实时显示下一次应付金额点击Update your subscription now按钮保存变更。计费与生效规则关键参数原文档明确了两条必须掌握的订阅变更规则随时升级Upgrade可以以 5 个用户为一个增量随时增加用户数。新增用户按**按比例计费prorated**处理——即只为剩余订阅期内新增的席位付费而不是多付一整期降级Downgrade降级只能设置到当前订阅周期结束时生效即降级随下一个扣款周期next payment term才正式生效当前周期内仍保留原有席位数。这一用户数限制在 OpenProject 系统内部由企业版订阅/令牌机制强制执行。从源码结构看OpenProject::Enterprise模块集中定义了席位用量计算逻辑见 OpenProject::Enterprisedelegate :user_limit, to: EnterpriseToken def active_user_count User.human.active.count end def open_seats_count user_limit - active_user_count if user_limit end ## # Indicates if there are more active users than the support token allows for. # # return [Boolean] True if and only if there is a support token the user limit of which is exceeded. def user_limit_reached? active_user_count user_limit if user_limit end也就是说系统在计算活跃用户数时统计User.human.active人类账户中的活跃用户与订阅赋予的user_limit比较当active_user_count user_limit时判定为达到上限。这解释了为什么升级到 5 的整数倍席位后系统侧可立即分配更多可激活账户——席位上限直接由订阅数据驱动。当管理员打开企业版订阅管理页时系统还会预先检查是否已触顶并给出警告见 EnterpriseTokensController#check_user_limitdef check_user_limit if OpenProject::Enterprise.user_limit_reached? flash.now[:warning] I18n.t( warning_user_limit_reached_instructions, current: OpenProject::Enterprise.active_user_count, max: OpenProject::Enterprise.user_limit ) end end警告文案会同时带入当前活跃用户数与上限值便于管理员判断是否需要执行升级操作。用户数上限的数据来源user_limit的最终取值来自订阅/令牌对象见 EnterpriseTokendef user_limit if active_non_trial_tokens.any? get_user_limit_of(active_non_trial_tokens) elsif active_trial_token get_user_limit_of([active_trial_token]) end end # ... def get_user_limit_of(tokens) tokens.partition(:unlimited_users?) .find(proc { [] }, :present?) .map(:max_active_users) .max end从源码结构看max_active_users读取自订阅限制字段restrictions[:active_user_count]若某个令牌unlimited_users?即max_active_users为nil表示不限席位则优先采用不限分支多个令牌并存时取各令牌席位上限的最大值.max因此续费/升档后新令牌会立即参与上限计算。这也印证了文档中升级立即生效、降级延迟到下一计费周期的行为生效中的订阅记录直接决定当前用户数上限。取消订阅Cancel subscription取消流程同样从 Manage subscription 弹窗进入打开 Manage subscription 表单点击要取消的那条订阅即 更新订阅 的入口点击Cancel Subscription链接。重要原文档标注 取消后你会收到一封邮件确认。订阅将在当前订阅周期结束时终止即已付费周期内仍可继续使用。取消之后你的数据会保留一段时间以便在订阅重新激活reactivation时恢复。从源码结构看系统对企业版权限对象有完整的状态机管理包括trial、not_active、expiring_soon、in_grace_period、expired等状态EnterpriseToken#statuses并定义了宽限期reprieve/grace period概念def expiring_soon? token_object.will_expire? \ token_object.active?(reprieve: false) \ token_object.expires_at EXPIRING_SOON_DAYS.days.from_now end def in_grace_period? token_object.expired?(reprieve: false) \ !token_object.expired?(reprieve: true) end其中EXPIRING_SOON_DAYS 30即到期前 30 天会进入即将到期提示。可以推断云端订阅终止后同样遵循到期即止 宽限保留的模型与文档中数据保留一段时间以备重新激活的说明相互印证。查看账单历史与下载发票如需查看历史付款记录或下载旧发票进入Administration-Subscription点击Manage subscription按钮在弹窗中点击Billing History链接在账单历史页可看到企业云版本的全部历史付款每条记录提供Download链接下载发票 PDF。详细规则发票字段、银行转账注意事项等见 Invoices for the OpenProject Enterprise cloud edition。订阅状态如何影响系统功能企业版功能是否可用由当前生效的企业版令牌/订阅驱动。核心判断入口是 EnterpriseToken.allows_to?def allows_to?(feature) active_tokens.any? { |token| Authorization::EnterpriseService.new(token).call(feature).result } end def active? active_tokens.any? endactive_tokens通过active范围过滤出有效期覆盖当前日期且通过域名校验的令牌set_active_tokens并在请求级别缓存RequestStore.fetch(:current_ee_tokens)。前端展示层则通过 EnterpriseHelper#with_enterprise_banner_guard 决定企业版功能横幅是否渲染def with_enterprise_banner_guard(feature_key, inactive_guard: false, **args) if inactive_guard yield else concat(render(EnterpriseEdition::BannerComponent.new(feature_key, **args))) yield if EnterpriseToken.allows_to?(feature_key) end end这意味着订阅到期或取消生效后对应企业版功能入口会按此守卫机制逐步变为不可用而不会立即删除数据——与取消后数据保留一段时间的产品设计保持一致。小结操作速查表目标入口关键规则升级席位Manage subscription 弹窗 - 订阅 -Edit Subscription或 Administration - Subscription -Upgrade subscription5 个用户为一档按比例计费随时生效降级席位同上下一计费周期生效取消订阅订阅条目 -Cancel Subscription链接当期结束后终止数据保留一段时间可重新激活会收到邮件确认改账户/地址/支付方式Manage subscription 弹窗内对应选项影响发票开具与扣款下载发票弹窗内Billing History详见 发票与账单历史文档以上流程与规则均以当前仓库中 Manage your OpenProject Enterprise cloud subscription 文档为准席位与功能开关的机制以EnterpriseToken、OpenProject::Enterprise等源码实现为佐证。实际价格档位与扣款方式以 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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
