The official danh mục tính năng Doconut liệt kê việc in qua trình duyệt và xuất PDF là các khả năng của trình xem. Kiểm soát quyền truy cập vào chúng vẫn đòi hỏi hai quyết định riêng biệt: Doconut có hiển thị hành động liên quan hay không và ứng dụng chủ sở hữu có ủy quyền thao tác đó cho người dùng và tài liệu hiện tại hay không.

Để biết chính xác các điều khiển được hỗ trợ bởi bản dựng đã cài đặt, hãy bắt đầu với tài liệu Doconut và các mẫu được đóng gói có sẵn từ trang tải xuống Doconut chính thức. Không sao chép các khóa cấu hình hoặc mã nguồn từ phiên bản không liên quan hoặc từ bài viết chưa được xác minh.
1. Định nghĩa Chính sách In Trước
Ghi lại ai được phép in và dưới những điều kiện nào trước khi thay đổi thanh công cụ. Một chính sách hữu ích sẽ trả lời các câu hỏi như:
- In có được phép cho mọi người dùng, chỉ một số vai trò, hay cho các tài liệu cụ thể không?
- Quyết định có phụ thuộc vào tenant, trạng thái vụ việc, phân loại tài liệu, hay thời hạn không?
- Có cần watermark trên đầu ra có thể in không?
- Các sự kiện in có cần được ghi lại không?
- Người dùng có thể in phiên bản tài liệu cũ không?
- Điều gì sẽ xảy ra khi quyền thay đổi trong khi preview đang mở?
Tránh sử dụng một Boolean toàn cục khi quy tắc thực tế là ngữ cảnh. Hãy mô hình hoá việc in như một thao tác riêng để có thể ủy quyền độc lập với việc xem và tải xuống.
2. Tách Trạng thái UI khỏi Ủy quyền
Trang chủ có thể quyết định có hiển thị nút in sau khi nhận được kết quả ủy quyền do ứng dụng sở hữu. Điều này giúp người dùng không thể in hiểu rõ hơn.
Tuy nhiên, việc ẩn một điều khiển không tạo ra ranh giới ủy quyền. Người dùng vẫn có thể gọi trực tiếp một endpoint đã biết, phát lại yêu cầu trước đó, hoặc kích hoạt tính năng in của trình duyệt trên nội dung hiển thị. Mọi route máy chủ tạo ra đầu ra có thể in đều phải thực thi cùng một chính sách.
Sử dụng các trạng thái riêng biệt trong UI:
| Trạng thái | Hành vi của trình xem | Hành vi của máy chủ |
|---|---|---|
| Cho phép in | Hiển thị hành động in được hỗ trợ | Ủy quyền và tạo đầu ra yêu cầu |
| Không cho phép in | Ẩn hoặc vô hiệu hoá hành động kèm lời giải thích rõ ràng | Trả về phản hồi bị cấm |
| Chính sách chưa xác định | Giữ hành động không khả dụng trong khi quyền đang tải | Không tạo đầu ra |
| Phiên đã hết hạn | Yêu cầu người dùng xác thực lại | Từ chối yêu cầu lỗi thời |
3. Bảo vệ Endpoint In
Bảo vệ thao tác ứng dụng gọi việc in hoặc trả về đầu ra có thể in. Quyết định ủy quyền cần xem xét thành viên tenant, quyền sở hữu, phân loại, trạng thái quy trình làm việc và phiên bản tài liệu. Hãy giải quyết tài liệu trên máy chủ thay vì chấp nhận đường dẫn hoặc URL lưu trữ do client cung cấp.
Nếu ứng dụng của bạn in thông qua một route riêng của trình xem thay vì tạo PDF, hãy áp dụng cùng một quy trình ủy quyền trước khi gọi route đó.
4. Cấu hình Phiên bản Trình xem Đã Cài đặt
Khi quy tắc máy chủ đã tồn tại, cấu hình UI Doconut bằng tùy chọn chính xác được ghi trong tài liệu cho gói và các file mẫu đi kèm phiên bản của bạn. Các bản demo trực tiếp Doconut cho phép bạn quan sát hành vi trình xem được hỗ trợ trước khi cam kết tích hợp. Hãy kiểm tra:
- Tùy chọn được đặt ở đâu: cấu hình máy chủ, view model, hay khởi tạo client.
- Nó có ẩn mục trên thanh công cụ, vô hiệu hoá hành động, hay ảnh hưởng đến đầu ra được tạo không?
- Giá trị này áp dụng cho mỗi instance của trình xem hay toàn cục?
- In và xuất có phải là hai thao tác riêng biệt không?
- Một bản cập nhật có thay đổi tên tùy chọn hoặc giá trị mặc định không?
Xem mẫu chính thức là nguồn thông tin duy nhất đáng tin cậy. Một tên thuộc tính trông hợp lý không đủ bằng chứng để khẳng định trình xem đã nhận diện được nó.
5. Xử lý In Trình duyệt Một cách Trung thực
Cài đặt trên trình xem không thể đảm bảo thông tin hiển thị sẽ không bao giờ bị in hoặc sao chép. Trình duyệt có thể in toàn bộ trang chủ, và người dùng có thể chụp ảnh màn hình hoặc chụp ảnh thực tế. Việc chặn phím và CSS đặc thù cho in có thể cải thiện trải nghiệm mong muốn, nhưng chúng vẫn có thể bị vượt qua bằng các biện pháp phía client.
Nếu trang chủ không nên tạo ra bản sao giấy có giá trị, ứng dụng của bạn có thể sử dụng một giao diện riêng cho in để thay thế preview bằng thông báo giải thích. Giữ hành vi này tách biệt hoàn toàn khỏi các điều khiển đã được Doconut tài liệu hoá.
Không mô tả việc này như là “bảo vệ tài liệu”. Hãy dùng render phía server, ủy quyền, xuất có kiểm soát và watermark hiển thị khi đánh giá rủi ro yêu cầu biện pháp ngăn chặn mạnh hơn.
6. Giữ Tải xuống, Xuất và In Riêng biệt
Người dùng và nhà phát triển thường xem chúng như một công tắc “chỉ đọc” duy nhất, nhưng thực tế chúng đại diện cho các luồng dữ liệu khác nhau:
- Xem: hiển thị nội dung đã render.
- Tải xuống: trả về file nguồn hoặc một file lưu trữ khác.
- Xuất: tạo ra một định dạng phụ.
- In: tạo ra bản in có thể in hoặc kích hoạt tính năng in của trình duyệt.
Hãy ủy quyền mỗi thao tác một cách rõ ràng. Người dùng không được phép in vẫn có thể được phép tải xuống, hoặc ngược lại. Thanh công cụ của bạn nên phản ánh quyết định của máy chủ thay vì tự định nghĩa chúng.
7. Thêm Các Sự kiện Kiểm toán Hữu ích
Nếu việc in là nhạy cảm, ghi lại quyết định mà không lưu trữ nội dung tài liệu. Một sự kiện có thể bao gồm: người dùng, tenant, định danh tài liệu, phiên bản, kết quả chính sách, thời gian, và ID liên quan.
Ghi lại cả các lần cố gắng thành công và bị từ chối. Nếu dịch vụ in tạo file tạm, cũng ghi lại việc dọn dẹp đã hoàn thành hay chưa. Tránh ghi đường dẫn file, token, tiêu đề tài liệu chứa dữ liệu cá nhân và nội dung có thể in trong log thường.
8. Kiểm thử Ngoài Nút Thiếu
Thanh công cụ chỉ là khẳng định đầu tiên. Thêm các kiểm thử cho toàn bộ quy trình:
Người dùng được ủy quyền
- Hành động in dự định hiển thị.
- Yêu cầu in thành công cho tài liệu được phép.
- Phiên bản đúng được sử dụng.
- Các dấu hiệu yêu cầu xuất hiện trên đầu ra được tạo.
- Sự kiện kiểm toán ghi lại thành công.
Người dùng không được ủy quyền
- Hành động không tồn tại hoặc bị vô hiệu hoá.
- Yêu cầu trực tiếp tới route in trả về phản hồi bị cấm.
- Thay đổi ID tài liệu không vượt qua quy tắc.
- URL sao chép từ phiên được ủy quyền không thể được sử dụng sai mục đích.
- Việc từ chối không tiết lộ liệu tenant khác có sở hữu tài liệu hay không.
Thay đổi trạng thái
- Quyền bị thu hồi trong phiên sẽ được thực thi ở yêu cầu in tiếp theo.
- Phiên đã hết hạn không thể in.
- Tài liệu đã xóa hoặc bị thay thế tạo ra lỗi được kiểm soát.
- Đầu ra in tạm thời tuân theo quy tắc lưu trữ đã cấu hình.
Tự động hoá trình duyệt có thể xác minh trạng thái hiển thị và mã phản hồi. Các kiểm thử tích hợp nên xác minh việc đánh giá chính sách và ủy quyền cấp tài liệu một cách độc lập.
Các Câu hỏi Thường gặp
Việc ẩn nút in có ngăn được phím tắt in của trình duyệt không?
Không. Nó chỉ loại bỏ hành động dự định của trình xem nếu trình xem đã triển khai hành vi đó. In trình duyệt và chụp màn hình yêu cầu các biện pháp riêng và không thể ngăn hoàn toàn bằng mã phía client.
Có nên đưa quyền in vào URL xem không?
Nên ưu tiên quyết định ủy quyền phía server gắn với người dùng đã xác thực, tài liệu và thao tác. Nếu một tham chiếu tạm thời mang quyền, hãy giới hạn phạm vi, bảo vệ nó khỏi log và referrer, và xác thực lại các hành động nhạy cảm.
Vô hiệu hoá in có đủ cho tài liệu bí mật không?
Không. Đó chỉ là một biện pháp ngăn sử dụng hoặc ngăn cản. Các quy trình bảo mật tài liệu bí mật còn cần bảo vệ lưu trữ, ủy quyền cấp đối tượng, kiểm soát xuất, quy tắc lưu trữ, giám sát và mô hình rủi ro còn lại được chấp nhận.
Kết luận
Một triển khai kiểm soát in Doconut đáng tin cậy bắt đầu từ máy chủ và kết thúc ở giao diện người dùng. Định nghĩa chính sách, bảo vệ thao tác, cấu hình chỉ tùy chọn được tài liệu hoá cho trình xem đã cài, giải thích kết quả cho người dùng, và kiểm thử các yêu cầu trực tiếp cũng như trạng thái thanh công cụ. Sử dụng trang tính năng chính thức, tài liệu, bản tải xuống và demo làm nguồn thực hiện thay vì tự tạo mã sản phẩm trong bài viết.