# FDocumentPermission

> Language fallback: requested `zh-CN`; content is `en-US`.

- Human documentation: [https://docs.univer.ai/zh-CN/reference/facade/document-permission](https://docs.univer.ai/zh-CN/reference/facade/document-permission)

- Agent Markdown: [https://docs.univer.ai/zh-CN/reference/facade/document-permission.md](https://docs.univer.ai/zh-CN/reference/facade/document-permission.md)

- Requested language: `zh-CN`

- Content language: `en-US`

- Documentation version: `1.0.0-rc.0`

- Source: [facade/document-permission.mdx](https://github.com/dream-num/documentation/blob/dev/content/reference/facade/document-permission.mdx)

---

Command-backed permissions for one Document unit.

## Access

Access through:

* [`FDocument.getPermission()`](https://docs.univer.ai/zh-CN/reference/facade/document.md#getpermission)

## Setup

Register [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) or a preset that includes it. In plugin mode, import `@univerjs/docs/facade`. Additional methods below require their listed plugin packages. See [Facade setup](https://docs.univer.ai/zh-CN/guides/docs/getting-started/facade.md).

## `@univerjs/docs`

### `FDocumentPermission.canEdit`

Returns whether the whole Document is currently editable.

```typescript
canEdit(): boolean
```

**Returns**

Whether Document editing is allowed.

**Package:** [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) · [Type definitions](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/facade/f-document-permission.d.ts)

### `FDocumentPermission.getPoint`

Returns the current value of one Document unit permission.

```typescript
getPoint(action: DocumentUnitPermissionAction): boolean
```

**Parameters**

* `action` — Required. Unit permission action to query.

**Returns**

Whether the action is currently allowed.

**Examples**

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

const document = univerAPI.getActiveDocument()
const canPrint = document?.getPermission().getPoint(UnitAction.Print) ?? false
console.log(canPrint)
```

**Types:** [`DocumentUnitPermissionAction`](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/services/permission/document-permission.d.ts)

**Package:** [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) · [Type definitions](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/facade/f-document-permission.d.ts)

### `FDocumentPermission.setEditable`

Enables or disables editing for the whole Document.

```typescript
setEditable(editable?: boolean): Promise<void>
```

**Parameters**

* `editable` — Optional. Default: `true`. Whether editing is allowed. Defaults to true.

**Returns**

Resolves after the permission command finishes.

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64@7.0.2/lib/lib.es5.d.ts)

**Package:** [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) · [Type definitions](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/facade/f-document-permission.d.ts)

### `FDocumentPermission.setObjectPermissions`

Creates or updates child-object edit policies in this unit; policy: null removes protection and restores inheritance.

Requires Authz support and objectPermissionTypes configured for every target type. File and parent restrictions
still apply. Use the exported permission object ID helpers, not raw object IDs or server permission IDs.
The batch must be nonempty, contain distinct objects, and belong to this unit; file-wide policies are excluded.
Other targets use getDocumentSectionPermissionObjectId and getDocumentEntityPermissionObjectId.

edit: 'all' allows Unit editors, 'owner' restricts editing to the object owner, and 'members' selects existing
Unit collaborators. Pass their collaborator records from the member service; this does not invite new users.
Use strategies: \[] for the default Edit strategy; child-object strategies support only UnitAction.Edit.

Authz writes execute per object and can partially succeed. Inspect failed before retrying only those objects.
refreshError means writes finished but permission readback failed; do not retry succeeded objects for that error.
Successful binding changes share one undo entry; existing remote policy edits are not undoable.

```typescript
setObjectPermissions(changes: IObjectPermissionChange[]): Promise<IObjectPermissionBatchResult>
```

**Parameters**

* `changes` — Required. Permission object IDs and policies to apply.

**Returns**

Successful object IDs, per-object failures, and optional readback error.

**Throws**

Invalid batches or unsupported object types are rejected before Authz writes.

**Examples**

Set owner/member editing and remove protection in one batch

```ts
import type { ICollaborator } from '@univerjs/protocol'
import { getDocumentParagraphPermissionObjectId } from '@univerjs/docs'

// selectedMembers comes from the existing Unit collaborator picker/service.
async function applyPermissions(selectedMembers: ICollaborator[]) {
  if (!selectedMembers.length) throw new Error('Select at least one Unit collaborator.')
  const document = univerAPI.getActiveDocument()
  if (!document) throw new Error('No active document.')
  const objects = document.getParagraphs().slice(0, 3)
  const objectIds = objects.map((paragraph) =>
    getDocumentParagraphPermissionObjectId(paragraph.getSegmentId(), paragraph.getId()),
  )
  if (objectIds.length < 3) throw new Error('This example requires three paragraphs.')
  const result = await document.getPermission().setObjectPermissions([
    { objectId: objectIds[0], policy: { edit: 'owner', collaborators: [], strategies: [] } },
    {
      objectId: objectIds[1],
      policy: { edit: 'members', collaborators: selectedMembers, strategies: [] },
    },
    { objectId: objectIds[2], policy: null },
  ])
  // A policy creates protection if absent, or updates the existing policy when already configured.
  for (const failure of result.failed) {
    console.error(failure.objectId, failure.error)
  }
  if (result.refreshError) {
    console.error(result.refreshError)
  }
  return result
}
```

**Types:** [`IObjectPermissionBatchResult`](https://unpkg.com/@univerjs/core@1.0.0-rc.0/lib/types/services/permission/object-permission.service.d.ts) · [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64@7.0.2/lib/lib.es5.d.ts) · [`IObjectPermissionChange`](https://unpkg.com/@univerjs/core@1.0.0-rc.0/lib/types/services/permission/object-permission.service.d.ts)

**Package:** [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) · [Type definitions](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/facade/f-document-permission.d.ts)

### `FDocumentPermission.setPoint`

Sets one Document unit permission through the command system.

Supported actions are Edit, Copy, Print, Export, and Comment. Await the returned promise
before reading the new value or performing an action that depends on it.

```typescript
setPoint(action: DocumentUnitPermissionAction, value: boolean): Promise<void>
```

**Parameters**

* `action` — Required. Unit permission action to update.
* `value` — Required. Whether the action is allowed.

**Returns**

Resolves after the permission command finishes.

**Examples**

Disable copying while keeping the Document editable

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

const document = univerAPI.getActiveDocument()
if (!document) throw new Error('No active Document.')
await document.getPermission().setPoint(UnitAction.Copy, false)
```

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64@7.0.2/lib/lib.es5.d.ts) · [`DocumentUnitPermissionAction`](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/services/permission/document-permission.d.ts)

**Package:** [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) · [Type definitions](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/facade/f-document-permission.d.ts)

### `FDocumentPermission.setReadOnly`

Makes the whole Document read-only.

```typescript
setReadOnly(): Promise<void>
```

**Returns**

Resolves after the permission command finishes.

**Examples**

```ts
const document = univerAPI.getActiveDocument()
if (!document) throw new Error('No active Document.')
await document.getPermission().setReadOnly()
```

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64@7.0.2/lib/lib.es5.d.ts)

**Package:** [`@univerjs/docs`](https://docs.univer.ai/zh-CN/reference/packages/plugins/univerjs/docs.md) · [Type definitions](https://unpkg.com/@univerjs/docs@1.0.0-rc.0/lib/types/facade/f-document-permission.d.ts)
