教程:使用 Doconut 控制打印访问
2026/8/21

教程:使用 Doconut 控制打印访问

使用官方产品资源、应用拥有的权限、受保护的操作、清晰的用户体验以及实用的测试来规划 Doconut 打印访问。

官方的Doconut 功能目录 列出了浏览器打印和 PDF 导出作为查看器功能。对它们的访问控制仍然需要两个独立的决定:Doconut 是否展示相关操作,以及宿主应用是否授权当前用户和文档执行该操作。

文档打印路径在受控授权关卡结束
文档打印路径在受控授权关卡结束

要了解已安装构建支持的精确控制,请从Doconut 文档 开始,并使用官方Doconut 下载页面 提供的打包示例。不要从不相关的版本或未经验证的文章中复制配置键或源代码。


1. 首先定义打印策略

在更改工具栏之前,先写下谁可以打印以及在何种条件下可以打印。一个有用的策略会回答以下问题:

  • 是否允许所有查看器、仅特定角色或特定文档进行打印?
  • 决定是否取决于租户、案件状态、文档分类或到期时间吗?
  • 可打印输出是否需要水印?
  • 是否应审计打印事件?
  • 用户是否可以打印旧的文档修订版?
  • 当预览打开时权限发生变化,应如何处理?

当真实规则是情境化的时,避免使用单一全局布尔值。将打印建模为独立的操作,以便它可以独立于查看和下载进行授权。

2. 将 UI 状态与授权分离

宿主页面可以在收到应用拥有的权限结果后决定是否展示打印控件。这可以为无法打印的用户提供更清晰的指示。

然而,隐藏控件并不是授权边界。用户仍然可以直接调用已知端点、重放先前请求,或对可见内容使用浏览器打印。每个生成可打印输出的服务器路由都必须强制执行相同的策略。

使用 UI 中的不同状态:

状态查看器行为服务器行为
允许打印显示支持的打印操作授权并生成请求的输出
禁止打印隐藏或禁用该操作并提供明确说明返回禁止响应
策略未知在权限加载期间保持操作不可用不生成输出
会话已过期提示用户重新认证拒绝过期请求

3. 保护打印端点

保护调用打印或返回可打印输出的应用操作。授权决定应考虑租户成员资格、所有权、分类、工作流状态以及文档修订。应在服务器上解析文档,而不是接受客户端提供的路径或存储 URL。

如果您的应用通过特定查看器路由进行打印而不是生成 PDF,请在调用该路由之前同样执行授权检查。

4. 配置已安装的查看器版本

一旦服务器规则就位,使用针对您版本随包提供的示例文件中记录的确切选项来配置 Doconut UI。Doconut 实时演示 让您在决定具体集成方式之前观察受支持的查看器行为。请验证:

  1. 选项设置位置:服务器配置、视图模型或客户端初始化。
  2. 它是隐藏工具栏项、禁用操作,还是影响生成的输出。
  3. 该值是针对每个查看器实例还是全局适用。
  4. 打印和导出是否为独立操作。
  5. 更新是否更改了选项名称或默认值。

将官方示例视为唯一可信来源。看似合理的属性名称并不足以证明已安装的查看器能够识别它。

5. 诚实地处理浏览器打印

查看器设置无法保证可见信息永远不会被打印或捕获。浏览器可能会打印宿主页面,用户也可以截屏或拍照。键盘拦截和针对打印的 CSS 可以改善预期体验,但它们是可被绕过的客户端措施。

如果宿主页面不应生成有用的纸质副本,您的应用可以使用自己的打印专用呈现方式,用说明性信息替代预览。请将该宿主页面行为与 Doconut 的已记录查看器控制分开。

不要将其描述为文档保护。当风险评估要求更强的威慑时,请使用服务器端渲染、授权、受控导出以及可见水印。

6. 将下载、导出和打印分离

用户和开发者常常将它们视为同一个“只读”开关,但它们代表不同的数据流:

  • View 显示渲染后的内容。
  • Download 返回源文件或其他存储的文件。
  • Export 生成衍生格式。
  • Print 生成可打印的表示或调用浏览器打印。

对每个操作进行显式授权。无法打印的用户仍可能被允许下载,反之亦然。您的工具栏应反映服务器的决策,而不是自行定义。

7. 添加有用的审计事件

如果打印行为敏感,应记录决策而不记录文档本身。事件可以包含用户、租户、文档标识符、版本、策略结果、时间戳和关联 ID。

记录成功和被拒的尝试。如果打印服务创建了临时文件,还要记录其清理是否完成。避免在常规日志中记录文件路径、令牌、包含个人数据的文档标题以及可打印内容。

8. 超越缺失按钮的测试

工具栏仅是第一道断言。为整个操作添加测试:

授权用户

  • 预期的打印操作可见。
  • 对允许的文档的打印请求成功。
  • 使用了正确的版本。
  • 生成的输出中出现所需的标记。
  • 审计事件记录成功。

未授权用户

  • 操作缺失或被禁用。
  • 直接请求打印路由返回禁止响应。
  • 更改文档 ID 并不能绕过规则。
  • 从授权会话复制的 URL 不能被不当重用。
  • 拒绝响应不透露文档是否属于其他租户。

状态变化

  • 会话期间撤销的权限在下一个打印请求时生效。
  • 会话过期后无法打印。
  • 已删除或被取代的文档会产生受控错误。
  • 临时打印输出遵循配置的保留规则。

浏览器自动化可以验证可见状态和响应码。集成测试应独立验证策略评估和文档级授权。

常见问题

隐藏打印按钮会阻止浏览器的打印快捷键吗?
不会。它仅在已安装的查看器实现该行为时才会移除预期的查看器操作。浏览器打印和屏幕捕获需要单独考虑,且无法通过客户端代码完全阻止。

打印权限应包含在查看 URL 中吗?
更倾向于使用与已认证用户、文档和操作绑定的服务器端授权决策。如果临时引用携带权限,应将其范围限定得很窄,防止被日志和引用者记录,并在敏感操作时重新验证。

禁用打印对机密文档足够吗?
不够。这只是一个可用性或威慑控制。机密工作流还需要存储保护、对象级授权、受控导出、保留规则、监控以及可接受的残余风险模型。

结论

可信赖的 Doconut 打印控制实现应从服务器开始,直至界面结束。定义策略,保护操作,仅为已安装的查看器配置文档中记载的选项,向用户解释结果,并对直接请求以及工具栏可见性进行测试。请使用官方功能页面、文档、下载和演示作为实现来源,而不是在文章中重新编写产品代码。