PRD: Vòng đời, kích hoạt & kiểm tra hiệu lực lúc chạy của giấy phép
| Module | Giấy phép (CORE-15) | PRD ID | PRD-ACT-001 |
| Trạng thái | Shipped | Chủ sở hữu | Nhóm Giấy phép |
| Ngày | 2026-06-15 | Phiên bản | v1.0 |
| Gói | @nx/licensing · @nx/core | URD | LIC · ACT · VAL |
TL;DR
Biến một giấy phép đã cấp thành thứ mà sản phẩm đang chạy có thể tin cậy. Một giấy phép được cấp từ một gói với một khóa duy nhất, rồi được dẫn qua một vòng đời được canh giữ - tạm ngưng, khôi phục, gia hạn, thu hồi - nơi mỗi chuyển trạng thái được kiểm tra theo trạng thái hiện tại, được ghi nhật ký, và kích hoạt việc ký lại chứng chỉ. Thiết bị kích hoạt trên giấy phép bằng fingerprint, mỗi thiết bị duy nhất chiếm một chỗ tới hạn mức của gói. Lúc chạy, bất kỳ service nào cũng kiểm tra một khóa và nhận lại một mã trạng thái, tập tính năng đã phân giải, mức dùng chỗ, và một chứng chỉ đã ký mà nó xác minh ngoại tuyến - nên việc giới hạn tính năng và chỗ không bao giờ cần gọi sống tới licensing. Các chuyển trạng thái bị từ chối khi vô lý (gia hạn một giấy phép vĩnh viễn, khôi phục một giấy phép đã thu hồi), và hết hạn được phát hiện lười ở lần kiểm tra kế tiếp thay vì quét sớm.
1. Bối cảnh & Vấn đề
PRD-PLN-001 đã thiết lập trục giấy phép - các gói tái dùng với cờ tính năng có kiểu, cấp giấy phép, và một lần kiểm tra hiệu lực đầu tiên. Nó định nghĩa giấy phép là gì; nó không đặc tả, đầy đủ chiều sâu, đường đi vận hành lúc chạy mà một giấy phép đi qua sau khi được cấp: mỗi chuyển trạng thái được canh giữ ra sao, thiết bị chiếm và giải phóng chỗ thế nào, và một lần kiểm tra trả về chính xác cái gì dưới mỗi trạng thái giấy phép.
Thiếu chiều sâu đó, hợp đồng lúc chạy trở nên mơ hồ. Một giấy phép hết hạn có thể được gia hạn để sống lại không? Điều gì xảy ra khi một giấy phép tạm ngưng được gia hạn? Một thiết bị kiểm tra lại có chiếm chỗ thứ hai không? Một service nhận mã gì khi giấy phép quá cửa sổ ân hạn so với chỉ đang tạm ngưng? Mỗi service tiêu thụ sẽ phải đoán, và các câu trả lời sẽ trôi dạt khác nhau giữa các module.
Bước tăng tiến này ghim chặt đường đi cấp → kích hoạt → kiểm tra thành một hợp đồng đáng tin, đúng với mã: một máy trạng thái vòng đời được canh theo trạng thái, kích hoạt thiết bị bằng fingerprint với thực thi hạn mức chỗ, và một quy trình kiểm tra có mã kết quả, hành vi hết hạn lười, tính năng đã phân giải, xử lý chỗ, và chứng chỉ đã ký đều được đặc tả - nên mọi service giới hạn tính năng và chỗ ngoại tuyến theo một định nghĩa.
2. Mục tiêu & Phi mục tiêu
Mục tiêu
- Cấp một giấy phép từ một gói với một khóa được sinh duy nhất, tính hạn và ân hạn từ gói.
- Một vòng đời được canh giữ - tạm ngưng, khôi phục, gia hạn, thu hồi - nơi mỗi chuyển trạng thái kiểm tra trạng thái hiện tại, được ghi nhật ký, và ký lại chứng chỉ.
- Kích hoạt thiết bị bằng fingerprint có tính bất biến lặp theo từng thiết bị và thực thi hạn mức chỗ hiệu lực.
- Một lần kiểm tra lúc chạy trả về mã trạng thái chính xác, tập tính năng đã phân giải, mức dùng chỗ, và một chứng chỉ đã ký.
- Hết hạn lười - một giấy phép quá cửa sổ ân hạn chuyển sang hết hạn ở lần kiểm tra kế tiếp, không có bộ quét nền.
- Một chứng chỉ đã ký mà các service tiêu thụ xác minh ngoại tuyến, làm mới ở mỗi thay đổi vòng đời.
Phi mục tiêu
- Định nghĩa bản thân các gói và cờ tính năng - đặc tả trong PRD-PLN-001 (URD-PLN).
- Thanh toán, hóa đơn, đòi nợ, hoặc tích hợp tính phí.
- Thực thi tính năng lúc chạy bên trong các module tiêu thụ - mỗi module tự giới hạn theo chứng chỉ.
- Đo lường mức dùng, nhịp tim, hoặc quét hết hạn sớm / theo lịch.
- Giao diện quản lý giấy phép (việc của frontend).
3. Chỉ số thành công
| Chỉ số | Mục tiêu / tín hiệu |
|---|---|
| Đúng vòng đời | Mỗi chuyển trạng thái được canh (gia hạn một giấy phép vĩnh viễn, khôi phục một giấy phép không tạm ngưng, gia hạn/khôi phục một giấy phép đã thu hồi) bị từ chối với lý do theo trạng thái |
| Toàn vẹn chỗ | Một chỗ cho mỗi cặp (giấy phép, fingerprint thiết bị) duy nhất; một thiết bị kích hoạt lại không bao giờ chiếm chỗ thứ hai |
| Kiểm tra tất định | Mã kết quả kiểm tra khớp trạng thái giấy phép cho mọi trường hợp (hợp lệ / ân hạn / chưa bắt đầu / hết hạn / tạm ngưng / thu hồi / không tìm thấy / đạt hạn mức chỗ) |
| Giới hạn ngoại tuyến | Các service tiêu thụ giới hạn tính năng và chỗ theo chứng chỉ - không gọi sống tới licensing mỗi yêu cầu |
| Đầy đủ nhật ký | 100% hành động vòng đời và kích hoạt ghi một sự kiện chỉ-thêm; mỗi thay đổi vòng đời ký lại chứng chỉ |
4. Chân dung & Tình huống
| Chân dung | Mục tiêu trong tính năng này |
|---|---|
| Vận hành nền tảng | Cấp một giấy phép và dẫn nó qua tạm ngưng / khôi phục / gia hạn / thu hồi, tin chắc mỗi chuyển trạng thái được canh giữ |
| Chủ merchant | Tự cấp một gói dùng thử miễn phí và chạy trên một giấy phép hợp lệ trên các thiết bị |
| Thiết bị / client POS | Kích hoạt trên một giấy phép bằng fingerprint và ở trong hạn mức chỗ |
| Service tiêu thụ | Kiểm tra một khóa, đọc tính năng đã phân giải và mức dùng chỗ, và giới hạn ngoại tuyến theo chứng chỉ đã ký |
Tình huống cốt lõi: một vận hành viên cấp một giấy phép thuê bao cho một merchant; các thiết bị POS của merchant kích hoạt bằng fingerprint, mỗi thiết bị chiếm một chỗ tới hạn mức của gói; mỗi lần khởi động một service kiểm tra khóa và nhận VALID với tính năng đã phân giải, mức dùng chỗ, và một chứng chỉ đã ký mà nó lưu đệm và xác minh ngoại tuyến. Khi giấy phép quá cửa sổ ân hạn, lần kiểm tra kế tiếp chuyển nó sang hết hạn và trả về LICENSE_EXPIRED; gia hạn nó khôi phục về hoạt động với một cửa sổ hiệu lực mới và ký lại chứng chỉ.
5. Câu chuyện người dùng
- Là vận hành viên, tôi cấp một giấy phép từ một gói và nhận một khóa duy nhất, để quyền sử dụng gắn với một chủ thể đã biết.
- Là vận hành viên, tôi tạm ngưng rồi khôi phục một giấy phép, và hệ thống từ chối khôi phục bất cứ gì không phải đang tạm ngưng, để vòng đời không thể bị làm hỏng.
- Là vận hành viên, tôi gia hạn một giấy phép để kéo dài, và gia hạn một giấy phép vĩnh viễn hoặc đã thu hồi bị từ chối, để gia hạn chỉ xảy ra khi hợp lý.
- Là vận hành viên, tôi thu hồi một giấy phép vĩnh viễn, biết rằng đã thu hồi là chung cuộc và không bao giờ gia hạn hay khôi phục được.
- Là client thiết bị, tôi kích hoạt bằng fingerprint và kích hoạt lại cùng thiết bị tái dùng chỗ của nó, để một thiết bị không bao giờ tiêu hai chỗ.
- Là service tiêu thụ, tôi kiểm tra một khóa một lần và giới hạn tính năng và chỗ ngoại tuyến theo chứng chỉ, để không bao giờ gọi licensing mỗi yêu cầu.
- Là service tiêu thụ, tôi nhận một mã trạng thái chính xác lúc kiểm tra, để phân biệt một giấy phép ân hạn với một giấy phép tạm ngưng.
6. Yêu cầu chức năng
| # | Yêu cầu | URD ref |
|---|---|---|
| FR-1 | Cấp một giấy phép từ một gói với một khóa được sinh duy nhất; tính hạn và ân hạn từ thời lượng của gói (vĩnh viễn = không hết hạn) | URD-LIC-001..002 |
| FR-2 | Tạm ngưng một giấy phép hoạt động, rồi khôi phục - khôi phục bị từ chối trừ khi trạng thái hiện tại là tạm ngưng | URD-LIC-003..004 |
| FR-3 | Gia hạn kéo dài hiệu lực từ thời điểm muộn hơn giữa hạn hiện tại hoặc bây giờ và khôi phục một giấy phép hết hạn về hoạt động | URD-LIC-005 |
| FR-4 | Gia hạn bị từ chối cho một giấy phép vĩnh viễn, và cho một giấy phép tạm ngưng hoặc đã thu hồi | URD-LIC-006..007 |
| FR-5 | Thu hồi là chung cuộc - một giấy phép đã thu hồi không bao giờ gia hạn hay khôi phục được | URD-LIC-007 |
| FR-6 | Mỗi hành động vòng đời ghi một sự kiện chỉ-thêm và ký lại & phát lại chứng chỉ | URD-LIC-009..010 |
| FR-7 | Một merchant tự cấp một giấy phép dùng thử miễn phí; một bản dùng thử hiện có được trả về, không bao giờ nhân đôi | URD-LIC-008 |
| FR-8 | Kích hoạt một giấy phép trên một thiết bị bằng fingerprint (nhãn / nền tảng / hostname tùy chọn); kích hoạt lại cùng thiết bị tái dùng chỗ của nó | URD-ACT-001..002 |
| FR-9 | Số chỗ thiết bị hoạt động không thể vượt hạn mức chỗ hiệu lực (ghi đè nếu không thì gói); hạn mức null nghĩa là không giới hạn; hủy kích hoạt giải phóng một chỗ | URD-ACT-003..005 |
| FR-10 | Kích hoạt bị từ chối khi giấy phép không ở trạng thái hoạt động | URD-ACT-007 |
| FR-11 | Kiểm tra một khóa và trả về một mã kết quả: hợp lệ, ân hạn, chưa bắt đầu, hết hạn, tạm ngưng, thu hồi, không tìm thấy, hoặc đạt hạn mức chỗ | URD-VAL-001..004 · URD-VAL-007 |
| FR-12 | Một giấy phép quá cửa sổ ân hạn được chuyển lười sang hết hạn lúc kiểm tra - không có bộ quét nền | URD-VAL-005 |
| FR-13 | Kiểm tra trả về tập tính năng đã phân giải (áp dụng ghi đè theo giấy phép) và mức dùng chỗ (đã dùng / hạn mức) | URD-VAL-006..007 |
| FR-14 | Một lần kiểm tra thành công trả về một chứng chỉ đã ký mà các service khác xác minh ngoại tuyến; kiểm tra ghi thời điểm kiểm tra cuối theo cố gắng tốt nhất | URD-VAL-008..009 |
Toàn văn yêu cầu và tiêu chí chấp nhận nằm trong URD Giấy phép. PRD này tham chiếu chúng thay vì lặp lại. Các yêu cầu gói và cờ tính năng (URD-PLN) được đặc tả trong PRD-PLN-001.
7. Yêu cầu phi chức năng
| Lĩnh vực | Yêu cầu |
|---|---|
| Nhất quán | Các chuyển trạng thái vòng đời khóa hàng giấy phép và chạy trong một giao dịch; một thất bại bộ phận cuộn lùi hoàn toàn |
| Đồng thời | Hết hạn lười dùng một phép chuyển trạng thái có điều kiện nên hai lần kiểm tra đồng thời không thể chuyển kép; bên ghi thua re-read trạng thái thực tế |
| Bất biến lặp | Một chỗ thiết bị khóa theo (giấy phép, fingerprint) - kích hoạt lại và kiểm tra lại cùng thiết bị không bao giờ tạo chỗ thứ hai |
| Toàn vẹn dữ liệu | Không thay đổi trạng thái nào mà không có một sự kiện nhật ký chỉ-thêm tương ứng; mỗi thay đổi vòng đời ký lại chứng chỉ |
| Tin cậy | Chứng chỉ được ký Ed25519 và xác minh được ngoại tuyến bởi bất kỳ service tiêu thụ nào; nó được lưu đệm với một TTL và làm mới ở mỗi thay đổi vòng đời |
| Hiệu năng / quy mô | Các bên tiêu thụ xác minh chứng chỉ ngoại tuyến - không gọi sống tới licensing mỗi yêu cầu; hết hạn phát hiện lười, không bao giờ quét |
| Phạm vi & phân quyền | Một giấy phép ràng buộc vào đúng một chủ thể (merchant hoặc người dùng); hành động vòng đời và kích hoạt được giới hạn bởi quyền phạm vi licensing |
| i18n | Tên hiển thị giấy phép là song ngữ ({ en, vi }) |
8. Trải nghiệm & Luồng
Máy trạng thái vòng đời giấy phép - mỗi chuyển trạng thái được canh theo trạng thái hiện tại:
Kiểm tra lúc chạy với xử lý chỗ thiết bị:
Bề mặt chỉ phía backend trong @nx/licensing - các hành động cấp và vòng đời, kích hoạt thiết bị, và lệnh kiểm tra. Không có giao diện quản lý giấy phép trong bước tăng tiến này.
9. Dữ liệu & Miền
| Thực thể | Vai trò trong đường đi này |
|---|---|
License | Quyền sử dụng đã cấp - khóa duy nhất, trạng thái, hạn / ân hạn đã tính, ghi đè tùy chọn, và chứng chỉ đã ký được lưu đệm |
Activation | Một chỗ thiết bị ràng buộc vào một giấy phép bằng fingerprint, với nhãn / nền tảng / hostname tùy chọn |
LicenseEvent | Một bản ghi nhật ký chỉ-thêm cho mọi hành động vòng đời và kích hoạt |
Policy | Gói mà một giấy phép được cấp từ đó - cung cấp thời lượng, ân hạn, hạn mức chỗ, và cờ tính năng đọc lúc phân giải |
PolicyFeature | Một cờ tính năng có kiểu được phân giải vào kết quả kiểm tra và chứng chỉ |
Chỉ là khái niệm - toàn bộ schema và bất biến trong mô hình miền licensing. Cả năm bảng nằm trong
@nx/corevà được tái xuất bởi@nx/licensing.
10. Phụ thuộc & Giả định
Phụ thuộc vào
- Gói & cờ tính năng (PRD-PLN-001, URD-PLN) - một giấy phép được cấp từ một gói mà thời lượng, ân hạn, hạn mức chỗ, và cờ của nó dẫn dắt đường đi này.
- Commerce (Commerce) - một giấy phép ràng buộc vào một chủ thể merchant (hoặc người dùng).
- Phân quyền (Permissions) - hành động vòng đời và kích hoạt được giới hạn bởi quyền phạm vi
licensing. - Một cặp khóa ký (Ed25519) cho chứng chỉ, với khóa công khai phân phối tới các bên tiêu thụ để xác minh ngoại tuyến.
Giả định
- Một gói dùng thử miễn phí được gieo sẵn để merchant tự phục vụ từ ngày đầu.
- Các module tiêu thụ tự giới hạn từng tính năng theo chứng chỉ; licensing không thực thi tính năng bên trong chúng.
- Báo cáo chấp nhận phát hiện hết hạn lười (không sớm).
11. Rủi ro & Câu hỏi mở
| Rủi ro / câu hỏi | Giảm thiểu / trạng thái |
|---|---|
| Hai lần kiểm tra đồng thời cùng phát hiện hết hạn | Phép chuyển trạng thái có điều kiện - chỉ một bên ghi chuyển; bên kia re-read trạng thái hiện tại thực tế |
| Một thiết bị kiểm tra lại có thể chiếm chỗ thứ hai | Chỗ khóa theo (giấy phép, fingerprint) - một chỗ hiện có được tái dùng trước khi tạo bất kỳ chỗ mới nào |
| Hết hạn lười có thể trễ độ chính xác báo cáo | Chấp nhận; hết hạn chuyển ở lần kiểm tra kế tiếp. Mở: một bộ quét theo lịch nếu cần hết hạn sớm |
| Chuyển trạng thái vòng đời trên một bản đọc cũ | Mỗi chuyển trạng thái khóa hàng giấy phép trong một giao dịch trước khi kiểm tra trạng thái |
| Tin cậy chứng chỉ phụ thuộc phân phối khóa | Khóa công khai gửi tới các bên tiêu thụ; đường xoay khóa phải được định nghĩa trước bất kỳ thay đổi khóa nào |
| Số học thời lượng cố định cho gia hạn / hết hạn | Mở: chuyển sang tháng / năm theo lịch nếu cần |
12. Kế hoạch phát hành & Tiêu chí ra mắt
| Khía cạnh | Kế hoạch |
|---|---|
| Giai đoạn | P1 (vòng đời + kiểm tra) và P2 (kích hoạt thiết bị + phân phối chứng chỉ) - xem danh mục tính năng URD |
| Triển khai | Một phần của @nx/licensing; không cờ tính năng; một gói dùng thử miễn phí được gieo sẵn để merchant tự phục vụ từ ngày đầu |
| Di trú | Không - chạy trên các thực thể licensing hiện có (bảng nằm trong @nx/core) |
| Tiêu chí ra mắt | Cấp → kích hoạt → kiểm tra chạy thông suốt; mỗi chuyển trạng thái được canh bị từ chối với lý do theo trạng thái; một thiết bị không bao giờ tiêu hai chỗ; kiểm tra trả về đúng mã, tính năng đã phân giải, mức dùng chỗ, và một chứng chỉ xác minh ngoại tuyến; một giấy phép quá ân hạn chuyển sang hết hạn ở lần kiểm tra kế tiếp |
| Giám sát | Phân bố mã kết quả kiểm tra, tỉ lệ từ chối hạn mức chỗ, nhất quán hành động vòng đời với sự kiện nhật ký, lỗi ký chứng chỉ |
13. Hỏi đáp
Tôi có thể gia hạn một giấy phép hết hạn để sống lại không? Có - gia hạn khôi phục một giấy phép hết hạn về hoạt động với một cửa sổ hiệu lực mới. Nhưng gia hạn bị từ chối cho một giấy phép vĩnh viễn (không có gì để kéo dài) và cho một giấy phép tạm ngưng hoặc đã thu hồi.
Thu hồi có đảo ngược được không? Không - đã thu hồi là chung cuộc. Một giấy phép đã thu hồi không bao giờ gia hạn hay khôi phục được; hãy cấp một giấy phép mới.
Một thiết bị kiểm tra hai lần có chiếm hai chỗ không? Không - một chỗ khóa theo cặp (giấy phép, fingerprint thiết bị). Lần kiểm tra thứ hai tái dùng chỗ hiện có; không tiêu chỗ mới.
Điều gì xảy ra ngay khi một giấy phép quá cửa sổ ân hạn? Không gì cho tới lần kiểm tra kế tiếp - không có bộ quét nền. Lần kiểm tra kế tiếp chuyển lười nó sang hết hạn, ghi nhật ký thay đổi, ký lại chứng chỉ, và trả về LICENSE_EXPIRED.
Một service phân biệt một giấy phép ân hạn với một giấy phép tạm ngưng thế nào? Bằng mã kết quả - một giấy phép trong ân hạn kiểm tra ra hợp lệ với GRACE_PERIOD, còn một giấy phép tạm ngưng kiểm tra ra không hợp lệ với một mã theo trạng thái.
Mỗi service có gọi licensing mỗi yêu cầu không? Không - một service kiểm tra khóa một lần và xác minh chứng chỉ đã ký trả về ngoại tuyến. Giới hạn mỗi yêu cầu xảy ra theo chứng chỉ.
Tài liệu liên quan
- URD: Giấy phép - Vòng đời giấy phép · Kích hoạt thiết bị · Kiểm tra hiệu lực & Quyền sử dụng lúc chạy
- PRD anh em: Gói, Giấy phép & Quyền sử dụng lúc chạy
- Module: Giấy phép - tổng quan + truy vết
- Nhà phát triển: @nx/licensing · mô hình miền