> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Seguridad

> Controla el acceso a los datos de tus entidades con reglas de seguridad a nivel de fila y de campo.

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Estás viendo la documentación para desarrolladores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentación es para desarrolladores que trabajan con la plataforma para desarrolladores de Base44. Para información sobre la gestión de los datos de tu app desde el editor de apps, consulta <a href="/Building-your-app/Managing-your-app-data">Gestionar los datos de la app</a>.
    </div>
  </div>
</div>

Las entidades admiten dos niveles de seguridad:

* **Row Level Security (RLS)**: Controla a qué registros pueden acceder los usuarios.
* **Field Level Security (FLS)**: Controla a qué campos dentro de los registros pueden acceder los usuarios.

## Tipos de permiso

Cada nivel de seguridad tiene distintos permisos que puedes establecer. Para cada permiso, defines a quién se le permite realizar la acción.

### Row Level Security (RLS)

* `create` - Añade nuevos registros
* `read` - Visualiza registros
* `update` - Modifica registros
* `delete` - Elimina registros

### Field Level Security (FLS)

* `read` - Visualiza el campo
* `write` - Crea o modifica el campo

## Valores de permiso

Cada permiso acepta uno de los siguientes valores:

* `true` - Permite a todos los usuarios
* `false` - Bloquea a todos los usuarios
* `{<condition>}` - Permite a los usuarios que cumplan la condición

### Sintaxis de la condición

Al usar `{<condition>}` como valor de permiso, puedes definir reglas que comprueben los atributos o roles del usuario.

**1. Comparación entidad-usuario**

Compara campos del registro con los valores del usuario actual.

Campos de entidad que puedes referenciar:

* `created_by` - Email del usuario que creó el registro
* `created_by_id` - ID del usuario que creó el registro
* `entity_name` - Nombre del tipo de entidad
* `app_id` - App ID
* `environment` - `prod` o `dev`
* `is_sample` - Si son datos de muestra
* `is_deleted` - Flag de eliminación lógica
* `deleted_date` - Cuándo se eliminó
* `data.*` - Cualquier campo de las propiedades de tu esquema de entidad

Variables de plantilla para los valores del usuario:

* `{{user.email}}` - Email del usuario
* `{{user.id}}` - ID del usuario
* `{{user.role}}` - Rol del usuario
* `{{user.data.*}}` - Campos de usuario adicionales que definas

Ejemplo:

```json theme={null}
{"created_by": "{{user.email}}"}
{"data.department": "{{user.data.department}}"}
{"data.status": "approved"}
```

**2. Comprobación de condición de usuario**

Comprueba las propiedades del usuario directamente usando `user_condition`.

Campos de usuario que puedes comprobar:

* `email` - Email del usuario
* `id` - ID del usuario
* `role` - Rol del usuario
* `data.*` - Campos de usuario personalizados

Ejemplo:

```json theme={null}
{"user_condition": {"role": "admin"}}
{"user_condition": {"data.level": "senior"}}
```

**3. Condiciones complejas**

Combina varias condiciones usando operadores.

Operadores compatibles: `$or`, `$and`, `$nor`, `$in`, `$nin`, `$all`

Ejemplo:

```json theme={null}
{
  "$or": [
    {"created_by": "{{user.email}}"},
    {"user_condition": {"role": "admin"}}
  ]
}
```

## Ejemplo de Row Level Security (RLS)

Añade `rls` a nivel de entidad:

```json theme={null}
{
  "name": "task",
  "type": "object",
  "properties": {...},
  "rls": {
    "create": true,
    "read": {"created_by": "{{user.email}}"},
    "update": {"created_by": "{{user.email}}"},
    "delete": {"user_condition": {"role": "admin"}}
  }
}
```

## Ejemplo de Field Level Security (FLS)

Añade `rls` a las propiedades de campos individuales:

```json theme={null}
{
  "properties": {
    "salary": {
      "type": "number",
      "rls": {
        "read": {"user_condition": {"role": "admin"}},
        "write": {"user_condition": {"role": "admin"}}
      }
    }
  }
}
```

## Ejemplo completo con seguridad

Aquí tienes un esquema de entidad con RLS y FLS:

```json theme={null}
{
  "name": "Task",
  "type": "object",
  "title": "Task",
  "description": "A task item with priority, due date, and completion status",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 1000
    },
    "priority": {
      "type": "string",
      "enum": ["low", "medium", "high"],
      "default": "medium"
    },
    "completed": {
      "type": "boolean",
      "default": false
    },
    "due_date": {
      "type": "string",
      "format": "date"
    },
    "tags": {
      "type": "array",
      "items": {"type": "string"}
    },
    "internal_notes": {
      "type": "string",
      "rls": {
        "read": {"user_condition": {"role": "admin"}},
        "write": {"user_condition": {"role": "admin"}}
      }
    }
  },
  "required": ["title"],
  "rls": {
    "create": true,
    "read": {"created_by": "{{user.email}}"},
    "update": {"created_by": "{{user.email}}"},
    "delete": {"created_by": "{{user.email}}"}
  }
}
```

## Desplegar reglas de seguridad

Las reglas de seguridad forman parte de tu esquema de entidad. Después de añadir o actualizar las reglas de seguridad, despliega usando [`entities push`](/developers/references/cli/commands/entities-push). Las reglas de seguridad también se despliegan automáticamente cuando ejecutas el comando [`deploy`](/developers/references/cli/commands/deploy) para desplegar todo tu proyecto.

## Ver también

* [Resumen de entidades](/developers/backend/resources/entities/overview): Aprende sobre la configuración de esquemas de base de datos
* [Esquemas de entidad](/developers/backend/resources/entities/entity-schemas): Define la estructura de tus entidades
* [Esquema de usuario](/developers/backend/resources/entities/user-schema): Entidad integrada especial para la autenticación de usuarios
* [Estructura del proyecto](/developers/backend/overview/project-structure): Cómo encajan los esquemas de entidad en tu proyecto

<Note>Esta página se tradujo con IA. Para información más precisa y actualizada, consulta la [versión en inglés](/). </Note>
