# 权限

- Human documentation: [https://docs.univer.ai/zh-CN/guides/bases/features/core/permissions](https://docs.univer.ai/zh-CN/guides/bases/features/core/permissions)

- Agent Markdown: [https://docs.univer.ai/zh-CN/guides/bases/features/core/permissions.md](https://docs.univer.ai/zh-CN/guides/bases/features/core/permissions.md)

- Requested language: `zh-CN`

- Content language: `zh-CN`

- Documentation version: `1.0.0-rc.0`

- Source: [bases/features/core/permissions.zh-CN.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/features/core/permissions.zh-CN.mdx)

---

Bases 可以将整个 Base 或指定表、字段、记录、视图设为只读。常见用途是展示只读报表，或允许用户修改部分数据。

以下 API 需要先注册 Bases 插件并导入 `@univerjs-pro/bases/facade`。

## 整个 Base 只读

```ts
const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')

await base.getPermission().setReadOnly()
console.log(base.getPermission().canEdit()) // false

await base.getPermission().setEditable()
```

## 指定对象只读

例如，只限制一张表：

```ts
const table = base.getTables()[0]
if (!table) throw new Error('Create a table first')

await table.getPermission().setReadOnly()
await table.getPermission().setEditable()
```

字段、记录、视图也提供 `getPermission()`。启用仪表盘插件后，还可控制仪表盘和透视视图。对象设为可编辑并不会解除上级限制，例如表只读时，单独将记录设为可编辑仍不能修改它。

`setReadOnly()` 和 `setEditable()` 返回 Promise，需要 `await`。多个对象需要一起变更时，可使用 `base.getPermission().setObjectPermissions()`；完整参数见 [Bases Facade](https://docs.univer.ai/zh-CN/reference/facade/bases.md)。

## 复制、导出和评论

Base 级权限还可以单独控制复制、导出和评论，例如禁用复制：

```ts
import { UnitAction } from '@univerjs/protocol'

await base.getPermission().setPoint(UnitAction.Copy, false)
```

`UnitAction.Export` 和 `UnitAction.Comment` 分别控制导出和评论。

## 接入业务权限

本地权限用于控制编辑器行为，不能代替服务端鉴权。协同应用仍需在服务端检查内容读取、加入协同和提交修改的权限，见[服务端集成](https://docs.univer.ai/zh-CN/server.md)。

测试时分别使用编辑者、查看者和无权限用户，确认页面操作和直接请求都符合业务规则。
