权限与授权

了解 Unit 级操作权限、各产品的对象权限,以及前后端协同授权。

Univer 将权限分为整份内容的操作权限与内容内部的对象权限。Web SDK 根据权限控制交互和命令执行;Server SDK 在读取、协同提交和扩展服务边界执行应用的授权策略。

Unit 级权限

一个 Unit(内容单元) 是一份完整的内容实例,例如一份工作簿、文档、演示文稿、Relational Table、画布或 PDF。下面的 Unit 权限适用于 Sheet、Doc、Slide、Relational Table 和 Canvases;PDF 的当前范围见下文。

权限控制什么典型用法
编辑(Edit)修改内容和结构。查看者只读,编辑者可以填写和调整内容。
复制(Copy)在编辑器中复制内容。允许阅读和评论,同时限制内容复制。
评论(Comment)在启用评论功能后发起评论或回复。允许审阅者提出意见,同时保持正文只读。
打印(Print)使用产品的打印能力。允许在线阅读,同时限制打印。
导出(Export)将内容导出为支持的文件格式。为交付或归档开放文件导出。

编辑与评论相互独立。评论的编辑、删除和管理还应遵守应用对作者、所有者等身份的策略。

打印和导出同样属于 Unit 级权限。Sheet、Doc、Slide 和 Canvases 提供 Print 与 Export;Relational Table 当前提供 Export。各权限点需要配合对应的功能插件使用。

复制内容、复制整份文件、导出和下载属于不同操作,需要分别配置。是否允许打开文件,由应用的读取授权决定。

例如,Docs 可独立控制整份文档的 Unit 级权限:

TypeScript
import { UnitAction } from '@univerjs/protocol'const document = univerAPI.getActiveDocument()if (!document) throw new Error('Open a document first')const permission = document.getPermission()await permission.setReadOnly()await permission.setPoint(UnitAction.Copy, false)await permission.setPoint(UnitAction.Comment, true)await permission.setPoint(UnitAction.Print, false)await permission.setPoint(UnitAction.Export, false)

示例需要已注册相应产品与评论插件;插件模式还需导入 @univerjs/docs/facade。各产品的权限入口见下文,Sheets 使用自己的权限点枚举。

按产品控制内容细节

电子表格(Sheet)

权限分为工作簿 → 工作表 → 单元格区域。工作簿决定整份内容的编辑、复制、评论等能力;工作表可进一步限制单元格值、样式、行列增删、排序、筛选、透视表与附加对象操作。区域保护可控制指定范围的编辑和查看,并指定允许编辑的协作者。

例如,锁定预算公式列,只开放费用填写区。入口分别为 getWorkbookPermission()、getWorksheetPermission() 和 getRangePermission();工作表和区域设置保护点位前,先创建相应保护规则。涉及不可读取的数据时,应用读取接口也需按业务策略控制返回范围。

Sheets 权限与保护规则

文档(Doc)

在整份文档之下,可以控制节(Section)、段落和内容实体的编辑权限。实体包括表格、绘图、自定义块或范围等有稳定标识的内容;页眉、页脚中的段落也通过所属 segment 定位。

例如,保护合同固定条款,只开放待填写段落。段落和节使用 getPermission(),内容实体使用 document.getEntityPermission();对象权限随文档、父级与自身规则共同生效。

文档级权限 · 节、段落与实体权限

演示文稿(Slide)

权限可作用于演示文稿、单张幻灯片、页面元素以及母版编辑入口与元素。可以保护品牌模板和固定图形,同时开放业务页面中的文本框、图片或图表对象。

整份演示文稿使用 presentation.getPermission(),单页使用 slide.getPermission(),单个元素使用 slide.getElementPermission()。母版相关入口见 Presentation Facade。

Slides 权限 · Presentation Facade

关系型表格(Relational Table)

Relational Table 可以控制表、字段、记录、视图与仪表盘。编辑一个单元格时,会同时考虑 Relational Table、表、字段和记录的编辑限制;视图配置与仪表盘也可分别保护。

例如,保护字段结构与财务记录,允许业务人员维护日常任务。表、字段、记录和视图通过各自的 getPermission() 设置;仪表盘需要相应插件。按用户过滤可读取的字段或记录,应由应用的数据读取策略实现。

Relational Table 权限 · 对象权限 API

画布(Canvases)

在整个 Canvases 的权限之下,可以控制单个元素的编辑,例如图形、文本、图片或连接线。适合保护架构底图、流程框架,同时允许协作者维护指定节点。

整份画布使用 board.getPermission(),元素使用 board.getElementPermission(elementId)。元素的有效编辑权限同时受 Canvases 级和元素级规则约束。

Canvases 权限 · 元素权限

PDF

PDF 当前主要通过查看 / 编辑模式控制本地交互,与上述五类产品的 Unit / Object 权限 API 范围不同。文件读取、下载和导出策略由应用后端接入;PDF 当前也不属于核心协同服务支持的五类 Unit。

PDF 接入与内容操作

权限继承与协作者策略

对象级许可不能突破产品级和适用父级的限制。 例如,整份文档只读时,单独将某段落设为可编辑,最终仍不可编辑。通过 canEdit() 查询相应对象的有效结果。

Doc、Slide、Relational Table 和 Canvases 的子对象权限主要控制 Edit;复制和评论在产品级配置。Sheets 另外提供工作表和选区的专用点位,不能把某一产品的权限粒度直接套用到所有产品。

对 Doc、Slide、Relational Table 和 Canvases,可通过 setObjectPermissions() 批量管理对象的协作者策略:

策略允许谁编辑对象
all已具有该 Unit 编辑权限的协作者。
owner对象所有者,同时保留产品与父级权限约束。
members指定的已有 Unit 协作者。

这类策略需要接入 Authz 服务、为目标类型配置 objectPermissionTypes,并持久化对象绑定、规则和成员关系。请使用 SDK 导出的对象 ID helper,保持内容对象 ID 稳定;policy: null 用于移除保护并恢复继承。批量设置的结果可能包含部分失败,应检查 failed 与 refreshError。Sheets 通过工作表 / 区域保护接口接入相应策略。

前后端如何共同授权

应用维护一套可信的用户身份、角色与文档 / 对象策略,并分别驱动前端权限表现和服务端检查。

100%
层级负责什么
Web SDK获取当前用户的授权结果,更新权限点、编辑入口与命令检查,向用户反馈被限制的操作。
应用 Authz 接口根据可信登录身份查询或修改规则,返回用户对 Unit / 对象的实际权限,并验证规则管理资格。
Transport验证 Cookie、Session 或 Token,建立可信身份;浏览器提交的用户字段不能作为授权依据。
Endpoint校验 WebSocket 连接与 joinUnit,控制是否可以加入文档的实时房间。
Service在 readUnitData 校验读取,在 submitChangeset 校验提交;涉及对象级策略时,在应用阶段结合当前内容模型校验受影响对象。

Server SDK 提供 Middleware 授权入口,具体 ACL 和对象策略由应用提供。前端设置只读或对象保护,不会自动替代服务端校验。 只有 Unit 级编辑检查的应用,还需补充细粒度对象检查,才能落实上述段落、元素、字段或记录的业务限制。

例如,已创建的 collabService 可接入应用自己的 acl:

TypeScript
import { CollabError } from '@univerjs-pro/collaboration-service'collabService.use('submitChangeset', async (context, next) => {  const allowed = await acl.canEdit(    context.session.userId,    context.request.changeset.unitID,  )  if (!allowed) {    throw new CollabError('PERMISSION_DENIED', 'Editing is not allowed')  }  await next()})

本例只演示 Unit 级编辑授权。完整接入还需保护读取、JOIN、权限规则的修改,以及扩展模块的接口。对细粒度修改,可在 applyChangeset 等应用阶段校验实际受影响的对象,并保持策略可重试。

从身份与权限了解完整接入方式,生命周期入口见 Middleware 与 Event。

返回功能总览

你觉得这篇文档如何?

© 2026 DreamNum Co., Ltd.