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

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

一步步指南,涵盖 Doconut 打印、应用拥有的授权、查看器控制以及在不依赖虚构 API 代码片段的情况下进行测试。

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

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

若要了解已安装构建所支持的精确控制,请先查阅 Doconut 文档 并使用官方 Doconut 下载页面 提供的打包示例。请勿复制来自无关版本或未经验证的文章中的配置键或源代码。


1. 首先定义打印策略

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

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

当实际规则具有上下文性时,避免使用单一的全局布尔值。将打印建模为独立的操作,以便能够与查看和下载分开进行授权。

2. 将 UI 状态与授权分离

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

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

使用 UI 中的不同状态:

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

3. 保护打印端点

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

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

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

在服务器规则确定后,使用与你的版本随附的包和示例文件中记录的确切选项来配置 Doconut UI。Doconut 在线演示 可让你在决定具体集成方式之前观察受支持的查看器行为。请验证:

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

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

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

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

如果宿主页面不应生成有用的纸质副本,你的应用可以使用自定义的打印专用呈现方式,将预览替换为说明性信息。请将此类宿主页面行为与 Doconut 文档中列出的查看器控制分离。

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

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

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

  • 查看 显示渲染后的内容。
  • 下载 返回源文件或其他存储文件。
  • 导出 生成衍生格式。
  • 打印 生成可打印的表示或调用浏览器打印。

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

7. 添加有用的审计事件

如果打印属于敏感操作,请在不记录文档本身的前提下记录决策。审计事件可包括用户、租户、文档标识、修订、策略结果、时间戳以及关联 ID。

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

8. 超越按钮缺失的测试

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

授权用户

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

未授权用户

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

状态变化

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

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

常见问题

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

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

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

结论

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