Enterprise 版本
许可
NextPDF Enterprise 会把你的授权解析为一项运行时权益:一个版本层级、一组能力,以及一个品牌标识决策。一份已到期的付费授权会在永久回退保证下继续运行;只有更新与支持会停止。本页描述授权表面的外部可观察行为、能力与功能闸门,以及可选的在线激活契约。
可用性与授权
标题为“可用性与授权”的章节此能力发行于 NextPDF Enterprise(nextpdf/enterprise),并随一份 Enterprise 层级的授权封套激活。缺少该权益的部署不会加载此能力的类。比较各版本并获取授权。
授权是 Enterprise 的基础表面:它解析所有其他能力,因此一旦安装了 Enterprise 软件包,它便始终存在。各项下游功能由能力代码控制——版本层级能力与各自独立到期的附加包。该闸门会报告生效的版本、有效性、宽限期状态,以及生效的附加包集合。
概念概述
标题为“概念概述”的章节授权表面只有一项工作:把一份授权变成宿主应用程序可以据以行动的决策。它产出一项不可变的权益结果,包含五个在运行时关键的字段——版本层级、渠道(付费或评估)、品牌标识模式、已安装版本是否可运行,以及是否享有更新与支持权益。
各版本构成一个严格的层级结构:Enterprise 包含 Pro,Pro 包含 Core。因此,当被授权的版本处于或高于某项能力的最低层级时,一次能力检查便会成功。有些能力根本不绑定到任何版本——它们属于附加包,附加包带有各自独立于基础授权期限的到期时间。
权益决策区分五种离散状态。一份生效的授权拥有完整访问权。一份超过期限但仍在其宽限窗口内的付费授权保持完整访问权,并呈现一条“尽快续订”警告。一份超过其宽限窗口的付费授权进入永久回退:已安装的版本无限期地继续运行,但更新与支持不再属于权益范围。一份评估授权的行为有所不同——当它到期时,运行时会被限制,因为按设计评估是有时限的。当不存在任何授权时,宿主解析为一种失败即关闭的状态,并且任何输出都会被可见地标记,使得一个未授权的部署绝不会被误认为付费部署。
合同上的席位数不在运行时强制执行。普通运行没有遥测,也没有强制的回拨。可选的在线客户端仅为显式激活、续订检查与尽力而为的心跳而存在;一个从不调用它的宿主,仍然会从本地提供的授权中获得一项完整的权益决策。
试用模式是一项独立且更狭窄的策略。当一份授权被标记为试用时,它会限制处理吞吐量,并对生成的输出施加一道评估水印,从而使批量生产工作需要一份付费授权。试用到期严格强制执行,没有宽限期。
为何如此设计
标题为“为何如此设计”的章节关键的决策是:一份付费授权绝不禁用已安装的运行时。当付费期限结束时,权益转入 EntitlementStatus::PerpetualFallback——已安装的版本继续运行,仅撤销向前的更新与支持。该保证之所以成立,是因为权益是针对本地提供的授权所作的一项纯内存决策,因此没有任何回拨、没有任何网络中断能把付费运行时从客户脚下抽走。与之对应的配重是失败即关闭的默认值:一份缺失的授权或一份已到期的评估会解析到 Core 层级,并将 brandingMode 设为评估水印。如此,一个未授权的部署绝不会被悄悄误认为付费部署。对你所购买的给予永久回退,对你未购买的则失败即关闭——正是这种搭配,使授权在保持离线友好的同时不至于沦为一套凭良心的机制。
设计背景:开放内核,不锁定。
公共 API 表面
标题为“公共 API 表面”的章节composer require nextpdf/enterprise:^3受支持的集成点是权益评估器(授权到权益结果)、运行时功能闸门(isFeatureEnabled、requireFeature、hasCapability、requireCapability、isInGracePeriod、currentEdition、getActivePacks、trialPolicy)、能力注册表(路由到能力的解析与可用能力集合),以及可选的授权客户端(activate、checkRenewal、heartbeat)。请将权益评估器视为授权派生决策的唯一权威;不要直接对原始授权字段进行分支判断。
代码示例——快速开始
标题为“代码示例——快速开始”的章节use NextPDF\Enterprise\Licensing\EntitlementEvaluator;
$result = (new EntitlementEvaluator())->evaluate($license);
if (! $result->runtimeAllowed) { // No license, or an expired evaluation license. throw new RuntimeException($result->warningMessage ?? 'Enterprise runtime disabled.');}
// Perpetual fallback: still allowed to run; updates/support may be off.$canUpdate = $result->updateEntitled;$watermark = $result->shouldApplyEvaluationBranding();代码示例——生产环境
标题为“代码示例——生产环境”的章节use NextPDF\Enterprise\Licensing\CapabilityCode;use NextPDF\Enterprise\Licensing\FeatureGate;
final class ReportController{ public function __construct(private readonly FeatureGate $gate) {}
public function generate(): Response { // Throws a structured 403-style exception carrying the required // capability, the required pack, the current packs, and an // upgrade-info URL — usable as an upsell touchpoint. $this->gate->requireCapability(CapabilityCode::EnterpriseComplianceEvidence);
if ($this->gate->isInGracePeriod()) { $this->logger->notice('Enterprise license in grace period — renewal due.'); }
return $this->renderReport(); }}边界情况与陷阱
标题为“边界情况与陷阱”的章节- 永久回退不是宽限期。 宽限期让更新与支持保持开启;回退只让运行时保持开启。两者对付费授权而言都让已安装的版本保持运行。
- 评估到期会限制运行时。 与付费授权不同,一份已到期的评估授权会停止运行时并保留评估水印。
- 无授权时失败即关闭。 在未配置任何授权的情况下,权益为“无授权”,Enterprise 路径的运行时被禁用,且发出的输出会被加水印,使该状态在日志与制品中可见。
- 附加包到期是独立的。 一个附加包可以在基础授权仍然生效时到期;此时它所授予的能力会以一个区别于“未授权”的、独特的“包已到期”结果而失败。
- 能力拒绝是结构化的。 一项被拒绝的能力会携带所需能力、所需包(若有)、当前的包,以及一个升级信息 URL——请将这些呈现给用户,而非一个干巴巴的错误。
权益评估与能力检查是针对一份已解析授权的常数时间内存操作——请求路径上没有 I/O。可选的在线客户端仅在显式激活、续订检查与心跳时执行网络调用;心跳失败是非致命的,绝不会阻塞处理。
安全说明
标题为“安全说明”的章节本页有意只描述可观察的行为。授权封套验证、签名检查、反滥用逻辑,以及强制执行代码的位置不在范围内,且不在公共表面上记录。运维方与公共软件包契约及所记录的行为契约交互。在线激活契约使用一个签名后的响应封套与一个客户端提供的 nonce,使宿主能够检测一次重放或被篡改的激活响应;精确的验证流程不属于公共契约。
符合性
标题为“符合性”的章节- 在线激活响应承载于一个 JWS 风格的签名封套中——一个受保护头 / 载荷 / 签名三元组,采用 RFC 7515(JSON Web Signature)§3.1 所描述的紧凑、URL 安全的形式。
- 签名材料为 base64url,按 RFC 7515 §5.2 解码。
- 用于封套完整性的规范化 JSON 遵循 JSON 规范化方案,RFC 8785,§3。
- 激活签名是一个 Ed25519 签名,依据 RFC 8032(EdDSA)§5.1,对一个 32 字节公钥进行验证。
- 组件之间使用的短期服务令牌携带注册声明
iss、aud、sub、exp与jti,并遵守 RFC 7519(JWT)§4.1.4 的exp不晚于规则。
行为契约
标题为“行为契约”的章节- 权益评估产出一项不可变结果,带有一组固定的、与运行时相关的字段(版本层级、渠道、品牌标识模式、运行时是否允许、是否享有更新/支持权益)。
- 一份付费授权绝不禁用已安装的运行时:到期会让它经过宽限期,然后进入永久回退,仅撤销更新与支持。
- 一份已到期的评估授权会限制运行时并保留评估水印;试用到期严格强制执行,没有宽限期。
- “无授权”状态对 Enterprise 路径是失败即关闭的,且发出的输出会被加水印,使得一个未授权的部署绝不会被误认为付费部署。
- 能力拒绝是结构化的:它携带所需能力、所需包(若有)、生效的包,以及一个升级信息 URL。
- 权益与能力检查是常数时间的内存操作,请求路径上没有 I/O。
发布边界
标题为“发布边界”的章节本页仅记录外部可观察的行为与受支持的公共 API 表面。内部命名空间路径、辅助类、机制表、运行手册文件名,以及工单前缀不在范围内。
Core 回退
标题为“Core 回退”的章节NextPDF Core(Apache-2.0)没有版本或能力权益表面——没有功能闸门、没有权益评估器、没有授权客户端。一个需要未授权 Apache-2.0 行为的宿主直接使用 Core 引擎,而非 Enterprise 管线。Core 不进行闸门控制、不为授权加水印,也不评估权益。
Pro 回退
标题为“Pro 回退”的章节NextPDF Pro 同样没有权益表面——没有;此能力没有 Pro 层级的等价物。授权、能力注册表、功能闸门与激活契约仅发行于 nextpdf/enterprise 软件包中。
Enterprise 边界说明
标题为“Enterprise 边界说明”的章节授权封套验证流程、签名检查实现、反滥用逻辑,以及强制执行代码的位置仅在行为层面描述,且不在公共表面上复现。在线激活契约被记录为一个带客户端提供的 nonce 的签名响应封套;精确的验证流程不属于公共契约。
部署边界
标题为“部署边界”的章节NextPDF Enterprise 从一份本地提供的授权解析权益,普通运行没有强制的回拨。可选的在线客户端仅在显式激活、续订检查与尽力而为的心跳时执行网络调用;心跳失败是非致命的,绝不会阻塞处理。运维方负责授权供给、激活/续订配置,以及可选在线客户端的传输策略。NextPDF Enterprise 不在运行时强制执行合同上的席位数。
法律合规边界
标题为“法律合规边界”的章节容量与席位条款由你的授权协议管辖,而非由运行时强制执行。本文档不是法律意见;关于你的合同与监管义务,请咨询你自己的合规与法律顾问。