# Разрешения и авторизация

> Разрешения действий уровня Unit, права объектов по продуктам и авторизация на клиенте и сервере.

- Human documentation: [https://docs.univer.ai/ru-RU/overview/features/shared/permissions](https://docs.univer.ai/ru-RU/overview/features/shared/permissions)

- Agent Markdown: [https://docs.univer.ai/ru-RU/overview/features/shared/permissions.md](https://docs.univer.ai/ru-RU/overview/features/shared/permissions.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.3.0`

- Source: [features/shared/permissions.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/docs/features/shared/permissions.ru-RU.mdx)

---

Univer разделяет **действия над единицей контента целиком** и **права на объекты внутри неё**. Web SDK управляет взаимодействием и выполнением команд, а Server SDK предоставляет точки авторизации для чтения, отправки совместных изменений и сервисов расширений.

## Разрешения уровня Unit

[Unit (единица контента)](https://docs.univer.ai/ru-RU/guides/sheets/getting-started/quickstart.md#unit) — один полный экземпляр содержимого: книга, документ, презентация, Relational Table, доска или PDF. Приведённые ниже разрешения относятся к Sheets, Docs, Slides, Relational Table и Canvases; текущие возможности PDF описаны далее.

| Разрешение | Что контролирует | Пример |
| --- | --- | --- |
| Редактирование (Edit) | Изменение содержимого и структуры. | Читатели просматривают, редакторы заполняют и меняют структуру. |
| Копирование (Copy) | Копирование содержимого в редакторе. | Разрешить чтение и комментарии, ограничив копирование. |
| Комментарии (Comment) | Создание комментариев и ответов при установленной функции. | Разрешить рецензирование, оставив основной текст доступным только для чтения. |
| Печать (Print) | Использование функции печати продукта. | Разрешить чтение онлайн, ограничив печать. |
| Экспорт (Export) | Выгрузка содержимого в поддерживаемый формат файла. | Разрешить передачу результатов или архивирование. |

Редактирование и комментирование независимы. Изменение, удаление и управление комментариями также подчиняются политикам приложения для авторов и владельцев.

Print и Export также относятся к уровню Unit. Sheets, Docs, Slides и Canvases предоставляют оба разрешения; Relational Table пока предоставляет Export. Каждое разрешение используется с плагинами соответствующей функции.

Копирование содержимого, дублирование файла, экспорт и скачивание являются отдельными операциями. Возможность открыть файл определяется авторизацией чтения в приложении.

Например, настройте разрешения уровня Unit для Doc независимо:

```ts
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 использует собственные перечисления точек разрешений.

## Детальные права по продуктам

### Sheets

Иерархия прав: **книга → лист → диапазон ячеек**. Книга управляет общими правами редактирования, копирования и комментариев. Лист позволяет ограничивать значения, стили, добавление и удаление строк и столбцов, сортировку, фильтры, сводные таблицы и дополнительные объекты. Защита диапазона управляет редактированием и просмотром, позволяя указать допущенных участников.

Например, защитите формулы бюджета, оставив доступной область ввода расходов. Используйте `getWorkbookPermission()`, `getWorksheetPermission()` и `getRangePermission()`. Перед настройкой точек защиты создайте правило защиты листа или диапазона. Для недоступных для чтения данных API приложения также должен ограничивать возвращаемое содержимое.

[Права и защита Sheets](https://docs.univer.ai/ru-RU/guides/sheets/features/core/permission.md)

### Docs

Внутри документа можно защищать **разделы, абзацы и сущности контента**. Сущности включают таблицы, рисунки, пользовательские блоки и диапазоны со стабильными идентификаторами. Абзацы колонтитулов адресуются через свой segment.

Например, защитите фиксированные условия договора, разрешив заполнять отдельные абзацы. Для разделов и абзацев доступен `getPermission()`, для сущностей — `document.getEntityPermission()`. Эффективное разрешение объединяет правила документа, применимых родителей и самого объекта.

[Права документа](https://docs.univer.ai/ru-RU/reference/facade/document-permission.md) · [Права разделов, абзацев и сущностей](https://docs.univer.ai/ru-RU/reference/facade/document-object-permission.md)

### Slides

Защищайте **презентацию, отдельные слайды, элементы страницы, доступ к редактированию образца и его элементы**. Можно сохранить фирменные шаблоны и фиксированную графику, открыв для редактирования выбранные текстовые поля, изображения и диаграммы.

Используйте `presentation.getPermission()`, `slide.getPermission()` и `slide.getElementPermission()`. Доступ к правам образцов описан в Presentation Facade.

[Права Slides](https://docs.univer.ai/ru-RU/guides/slides/features/core/permissions.md) · [Presentation Facade](https://docs.univer.ai/ru-RU/reference/facade/presentation.md)

### Relational Table

Управляйте **таблицами, полями, записями, представлениями и панелями**. При редактировании ячейки учитываются ограничения Relational Table, таблицы, поля и записи вместе. Настройки представлений и панели можно защищать отдельно.

Например, защитите схему и финансовые записи, разрешив обновление повседневных задач. Таблицы, поля, записи и представления предоставляют `getPermission()`; для панелей нужен соответствующий плагин. Фильтрацию доступных для чтения полей и записей по пользователю реализует политика чтения данных приложения.

[Права Relational Table](https://docs.univer.ai/ru-RU/guides/bases/features/core/permissions.md) · [API прав объектов](https://docs.univer.ai/ru-RU/reference/facade/base-object-permission.md)

### Canvases

Под общими правами Canvases защищайте **отдельные элементы**: фигуры, текст, изображения и соединители. Это позволяет зафиксировать фон архитектуры или каркас процесса и разрешить участникам обновлять выбранные узлы.

Для Unit используйте `board.getPermission()`, для элементов — `board.getElementPermission(elementId)`. Для редактирования элемента нужны разрешения и на Canvases, и на сам элемент.

[Права Canvases](https://docs.univer.ai/ru-RU/reference/facade/board-permission.md) · [Права элементов](https://docs.univer.ai/ru-RU/reference/facade/board-element-permission.md)

### PDF

PDF пока использует **режимы просмотра и редактирования** для локального взаимодействия; их область отличается от API прав Unit/Object пяти продуктов. Чтение, скачивание и экспорт файлов авторизует сервер приложения. PDF также не входит в пять типов Unit, поддерживаемых Core Collaboration.

[Интеграция PDF и работа с содержимым](https://docs.univer.ai/ru-RU/guides/pdfs/getting-started/facade.md)

## Наследование и политики участников

**Разрешение на объект не отменяет ограничения Unit и применимых родителей.** Если документ доступен только для чтения, разрешение на редактирование отдельного абзаца не даст его изменить. Проверяйте эффективный результат через `canEdit()` у поддерживаемых объектов.

Права дочерних объектов Docs, Slides, Relational Table и Canvases в основном управляют Edit; Copy и Comment задаются на уровне Unit. У Sheets есть дополнительные точки для листов и диапазонов, поэтому детализация зависит от продукта.

Docs, Slides, Relational Table и Canvases предоставляют `setObjectPermissions()` для пакетного управления политиками участников:

| Политика | Кто может редактировать объект |
| --- | --- |
| `all` | Участники, уже имеющие Edit на Unit. |
| `owner` | Владелец объекта с учётом ограничений Unit и родителей. |
| `members` | Выбранные существующие участники Unit. |

Нужны интеграция Authz, настройка `objectPermissionTypes` для целевых типов и сохранение привязок объектов, правил и участников. Используйте экспортируемые хелперы ID и сохраняйте стабильность идентификаторов контента. `policy: null` снимает защиту и возвращает наследование. Пакетная запись может завершиться частично: проверяйте `failed` и `refreshError`. Sheets использует API защиты листов и диапазонов.

## Авторизация на клиенте и сервере

Используйте единую доверенную идентификацию пользователей и систему политик Unit и объектов, управляющую поведением клиента и авторизацией сервера.

```mermaid
flowchart LR
    P["Идентификация и политики<br/>приложения"]
    W["Web SDK<br/>Проверка взаимодействий<br/>и команд"]
    S["Server SDK<br/>Авторизация запросов<br/>и изменений"]
    D["Сохранение и рассылка"]
    P --> W
    P --> S
    W -->|"Отправка изменений"| S
    S -->|"Разрешено"| D
```

| Уровень | Ответственность |
| --- | --- |
| Web SDK | Получать допустимые действия пользователя, обновлять точки разрешений, элементы редактирования и проверки команд. |
| Authz API приложения | Запрашивать и менять политики на основе доверенной идентификации, возвращать эффективные права Unit/объектов и проверять право управления правилами. |
| Transport | Проверять Cookie, Session или Token и устанавливать доверенную идентификацию. Поля пользователя из клиента не являются основанием авторизации. |
| Endpoint | Авторизовать подключения WebSocket и вход в комнаты через `joinUnit`. |
| Service | Проверять чтение в `readUnitData`, отправку в `submitChangeset` и затронутые объекты на этапе применения изменений. |

Server SDK предоставляет Middleware, а приложение — ACL и политики объектов. **Режим только для чтения и защита объектов на клиенте не применяют серверную авторизацию автоматически.** Если проверяется только Edit на Unit, добавьте проверки ограничений абзацев, элементов, полей и записей.

Например, подключите существующий `collabService` к собственному `acl`:

```ts
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`, обеспечив безопасность повторных попыток.

Интеграция описана в [идентификации и авторизации](https://docs.univer.ai/ru-RU/server/collaboration/identity-and-authorization.md), точки жизненного цикла — в [Middleware и Events](https://docs.univer.ai/ru-RU/server/collaboration/middleware-and-events.md).

[Назад ко всем функциям](https://docs.univer.ai/ru-RU/overview/features.md)
