# Permisos y autorización

> Permisos de acciones de Unit, permisos de objetos por producto y autorización en frontend y backend.

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

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

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.3.0`

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

---

Univer distingue entre **acciones sobre una unidad de contenido completa** y **permisos sobre sus objetos internos**. Web SDK controla las interacciones y los comandos; Server SDK ofrece puntos de autorización para lecturas, envío de cambios colaborativos y servicios de extensión.

## Permisos de la Unit

Una [Unit (unidad de contenido)](https://docs.univer.ai/es-ES/guides/sheets/getting-started/quickstart.md#unit) es una instancia de contenido completa, como un libro, documento, presentación, Relational Table, tablero o PDF. Los permisos siguientes se aplican a Sheets, Docs, Slides, Relational Table y Canvases; el alcance actual de PDF se describe más adelante.

| Permiso | Qué controla | Ejemplo |
| --- | --- | --- |
| Editar (Edit) | Cambios de contenido y estructura. | Los lectores consultan; los editores rellenan y reorganizan. |
| Copiar (Copy) | Copiar contenido dentro del editor. | Permitir lectura y comentarios, restringiendo la copia. |
| Comentar (Comment) | Crear comentarios y respuestas con la función instalada. | Permitir revisiones manteniendo el contenido en solo lectura. |
| Imprimir (Print) | Usar la función de impresión del producto. | Permitir lectura en línea y restringir la impresión. |
| Exportar (Export) | Exportar contenido a un formato de archivo compatible. | Permitir entrega o archivo de resultados. |

Editar y comentar son independientes. La edición, eliminación y gestión de comentarios también siguen las políticas de la aplicación para autores y propietarios.

Print y Export también son permisos de la Unit. Sheets, Docs, Slides y Canvases ofrecen ambos; Relational Table ofrece actualmente Export. Cada permiso se utiliza con los plugins de su función correspondiente.

Copiar contenido, duplicar un archivo, exportarlo y descargarlo son operaciones distintas. La autorización de lectura de la aplicación determina si puede abrirse un archivo.

Por ejemplo, configure por separado los permisos de la Unit de un 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)
```

Registre primero los plugins del producto y de comentarios. El modo de plugins también requiere importar `@univerjs/docs/facade`. A continuación se indican los accesos por producto. Sheets utiliza sus propias enumeraciones de permisos.

## Permisos detallados por producto

### Sheets

La jerarquía es **libro → hoja → rango de celdas**. El libro controla edición, copia y comentarios globales. La hoja puede restringir valores, estilos, inserción y eliminación de filas y columnas, ordenación, filtros, tablas dinámicas y objetos adicionales. La protección de rangos controla edición y visualización, y permite seleccionar colaboradores autorizados.

Por ejemplo, proteja las fórmulas del presupuesto y deje editables las celdas de gastos. Use `getWorkbookPermission()`, `getWorksheetPermission()` y `getRangePermission()`. Cree la regla de protección de hoja o rango antes de configurar sus permisos. Si hay datos que no deben leerse, la API de lectura de la aplicación también debe limitar los datos devueltos.

[Permisos y protección de Sheets](https://docs.univer.ai/es-ES/guides/sheets/features/core/permission.md)

### Docs

Bajo el documento completo puede proteger **secciones, párrafos y entidades de contenido**. Las entidades incluyen tablas, dibujos, bloques personalizados y rangos con identificadores estables. Los párrafos de encabezados y pies se localizan mediante su segment.

Por ejemplo, proteja las cláusulas fijas de un contrato y permita rellenar determinados párrafos. Las secciones y párrafos ofrecen `getPermission()`; las entidades usan `document.getEntityPermission()`. El resultado combina las reglas del documento, los padres aplicables y el objeto.

[Permisos del documento](https://docs.univer.ai/es-ES/reference/facade/document-permission.md) · [Permisos de secciones, párrafos y entidades](https://docs.univer.ai/es-ES/reference/facade/document-object-permission.md)

### Slides

Proteja **presentaciones, diapositivas, elementos de página y el acceso a la edición del patrón y sus elementos**. Mantenga protegidas las plantillas de marca y los gráficos fijos, permitiendo editar cuadros de texto, imágenes o gráficos seleccionados.

Use `presentation.getPermission()`, `slide.getPermission()` y `slide.getElementPermission()`. Consulte Presentation Facade para los accesos relacionados con patrones.

[Permisos de Slides](https://docs.univer.ai/es-ES/guides/slides/features/core/permissions.md) · [Presentation Facade](https://docs.univer.ai/es-ES/reference/facade/presentation.md)

### Relational Table

Controle **tablas, campos, registros, vistas y paneles**. La edición de una celda combina las restricciones de Relational Table, tabla, campo y registro. La configuración de vistas y los paneles pueden protegerse por separado.

Por ejemplo, proteja el esquema y los registros financieros, permitiendo mantener las tareas diarias. Tablas, campos, registros y vistas ofrecen `getPermission()`; los paneles requieren su plugin. La aplicación implementa el filtrado por usuario de campos y registros legibles mediante su política de lectura de datos.

[Permisos de Relational Table](https://docs.univer.ai/es-ES/guides/bases/features/core/permissions.md) · [API de permisos de objetos](https://docs.univer.ai/es-ES/reference/facade/base-object-permission.md)

### Canvases

Bajo los permisos del tablero completo, proteja **elementos individuales**, como formas, texto, imágenes y conectores. Puede proteger el fondo de una arquitectura o la estructura de un flujo y permitir actualizar nodos concretos.

Use `board.getPermission()` para la Unit y `board.getElementPermission(elementId)` para los elementos. La edición efectiva requiere permiso tanto en Canvases como en el elemento.

[Permisos de Canvases](https://docs.univer.ai/es-ES/reference/facade/board-permission.md) · [Permisos de elementos](https://docs.univer.ai/es-ES/reference/facade/board-element-permission.md)

### PDF

PDF utiliza actualmente **modos de visualización y edición** para la interacción local, con un alcance diferente de las API Unit/Object de los cinco productos. El backend de la aplicación autoriza lecturas, descargas y exportaciones. PDF tampoco pertenece a los cinco tipos de Unit de Core Collaboration.

[Integración y operaciones de PDF](https://docs.univer.ai/es-ES/guides/pdfs/getting-started/facade.md)

## Herencia y políticas de colaboradores

**Los permisos de objetos siguen sujetos a las restricciones de la Unit y de sus padres aplicables.** Hacer editable un párrafo no permite modificar un documento de solo lectura. Consulte `canEdit()` para obtener el resultado efectivo en objetos compatibles.

Los permisos de objetos secundarios de Docs, Slides, Relational Table y Canvases controlan principalmente Edit; Copy y Comment se configuran en la Unit. Sheets añade permisos de hojas y rangos, por lo que la granularidad varía entre productos.

Docs, Slides, Relational Table y Canvases ofrecen `setObjectPermissions()` para gestionar políticas de colaboradores por lotes:

| Política | Quién puede editar el objeto |
| --- | --- |
| `all` | Colaboradores que ya tienen permiso Edit en la Unit. |
| `owner` | El propietario del objeto, sujeto a las restricciones de Unit y padres. |
| `members` | Colaboradores existentes de la Unit seleccionados. |

Estas políticas requieren integración con Authz, configurar `objectPermissionTypes` para los tipos de destino y persistir vínculos de objetos, reglas y miembros. Use los helpers de ID exportados y mantenga estables los ID de contenido. `policy: null` elimina la protección y restablece la herencia. Las escrituras por lotes pueden fallar parcialmente: compruebe `failed` y `refreshError`. Sheets utiliza las API de protección de hojas y rangos.

## Autorización en frontend y backend

Mantenga un sistema común de identidad fiable y políticas de Unit y objetos que dirija tanto el comportamiento del frontend como la autorización del backend.

```mermaid
flowchart LR
    P["Identidad y políticas<br/>de la aplicación"]
    W["Web SDK<br/>Comprobación de interacción<br/>y comandos"]
    S["Server SDK<br/>Autorización de solicitudes<br/>y cambios"]
    D["Persistir y difundir"]
    P --> W
    P --> S
    W -->|"Enviar cambios"| S
    S -->|"Permitido"| D
```

| Capa | Responsabilidad |
| --- | --- |
| Web SDK | Leer las acciones permitidas y actualizar permisos, controles de edición y comprobaciones de comandos. |
| API Authz de la aplicación | Consultar o modificar políticas con identidad fiable, devolver permisos efectivos de Unit/objetos y autorizar la gestión de reglas. |
| Transport | Autenticar Cookie, Session o Token y establecer una identidad fiable. Los campos de usuario enviados por el cliente no prueban autorización. |
| Endpoint | Autorizar conexiones WebSocket y la entrada en salas mediante `joinUnit`. |
| Service | Comprobar lecturas en `readUnitData` y envíos en `submitChangeset`; validar los objetos afectados durante la aplicación de cambios. |

Server SDK proporciona hooks Middleware; la aplicación aporta ACL y políticas de objetos. **El modo de solo lectura y la protección de objetos del frontend no aplican automáticamente la autorización del backend.** Si solo comprueba Edit de la Unit, añada comprobaciones de párrafos, elementos, campos y registros para hacer cumplir esas restricciones.

Por ejemplo, conecte un `collabService` existente con su propio `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()
})
```

Este ejemplo solo autoriza la edición de la Unit. Proteja también lecturas, JOIN, cambios de políticas y endpoints de extensión. Para escrituras detalladas, valide los objetos afectados en fases como `applyChangeset`, con políticas seguras ante reintentos.

Consulte [identidad y autorización](https://docs.univer.ai/es-ES/server/collaboration/identity-and-authorization.md) para la integración y [Middleware y Events](https://docs.univer.ai/es-ES/server/collaboration/middleware-and-events.md) para los hooks del ciclo de vida.

[Volver a todas las funciones](https://docs.univer.ai/es-ES/overview/features.md)
