# 權限

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

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

- Requested language: `zh-TW`

- Content language: `zh-TW`

- Documentation version: `1.2.0`

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

---

可將整個 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-TW/reference/facade/base.md)。

## 複製、匯出與留言

Base 層級的權限也可控制複製、匯出與留言。例如，停用複製：

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

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

使用 `UnitAction.Export` 與 `UnitAction.Comment` 設定匯出與留言權限。

## 接入業務權限

本機權限控制的是編輯器行為。協同應用程式還必須在伺服器端對內容讀取、加入協同與提交修改進行授權，請參閱[伺服器整合](https://docs.univer.ai/zh-TW/server.md)。

使用編輯者、檢視者與未授權使用者測試，同時檢查頁面操作與直接請求。
