> ## 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.

# Segurança

> Controle o acesso aos dados das suas entidades com regras de segurança em nível de linha e de campo.

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      Você está vendo a documentação para desenvolvedores
    </div>

    <div className="dev-docs-banner-text">
      Esta documentação é para desenvolvedores que trabalham com a plataforma para desenvolvedores Base44. Para informações sobre como gerenciar os dados do seu app usando o editor de apps, veja <a href="/Building-your-app/Managing-your-app-data">Gerenciar dados do app</a>.
    </div>
  </div>
</div>

As entidades suportam dois níveis de segurança:

* **Segurança em Nível de Linha (RLS)**: Controla quais registros os usuários podem acessar.
* **Segurança em Nível de Campo (FLS)**: Controla quais campos dentro dos registros os usuários podem acessar.

## Tipos de permissão

Cada nível de segurança tem diferentes permissões que você pode definir. Para cada permissão, você define quem está autorizado a realizar a ação.

### Segurança em Nível de Linha (RLS)

* `create` - Adicionar novos registros
* `read` - Visualizar registros
* `update` - Modificar registros
* `delete` - Remover registros

### Segurança em Nível de Campo (FLS)

* `read` - Visualizar o campo
* `write` - Criar ou modificar o campo

## Valores de permissão

Cada permissão aceita um dos seguintes valores:

* `true` - Permite todos os usuários
* `false` - Bloqueia todos os usuários
* `{<condition>}` - Permite usuários que correspondem à condição

### Sintaxe de condição

Ao usar `{<condition>}` como valor de permissão, você pode definir regras que verificam atributos ou funções do usuário.

**1. Comparação entidade-usuário**

Compare campos do registro com os valores do usuário atual.

Campos de entidade que você pode referenciar:

* `created_by` - E-mail do usuário que criou o registro
* `created_by_id` - ID do usuário que criou o registro
* `entity_name` - Nome do tipo de entidade
* `app_id` - ID do app
* `environment` - Ou `prod` ou `dev`
* `is_sample` - Se é dado de amostra
* `is_deleted` - Flag de soft delete
* `deleted_date` - Quando foi excluído
* `data.*` - Qualquer campo das propriedades do schema da sua entidade

Variáveis de template para valores do usuário:

* `{{user.email}}` - E-mail do usuário
* `{{user.id}}` - ID do usuário
* `{{user.role}}` - Função do usuário
* `{{user.data.*}}` - Campos adicionais de usuário que você define

Exemplo:

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

**2. Verificação de condição de usuário**

Verifique propriedades do usuário diretamente usando `user_condition`.

Campos de usuário que você pode verificar:

* `email` - E-mail do usuário
* `id` - ID do usuário
* `role` - Função do usuário
* `data.*` - Campos customizados de usuário

Exemplo:

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

**3. Condições complexas**

Combine múltiplas condições usando operadores.

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

Exemplo:

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

## Exemplo de Segurança em Nível de Linha (RLS)

Adicione `rls` no nível da entidade:

```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"}}
  }
}
```

## Exemplo de Segurança em Nível de Campo (FLS)

Adicione `rls` às propriedades de campo individuais:

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

## Exemplo completo com segurança

Aqui está um schema de entidade com RLS e 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}}"}
  }
}
```

## Implantando regras de segurança

As regras de segurança fazem parte do seu schema de entidade. Após adicionar ou atualizar regras de segurança, implante usando [`entities push`](/developers/references/cli/commands/entities-push). As regras de segurança também são implantadas automaticamente quando você executa o comando [`deploy`](/developers/references/cli/commands/deploy) para implantar todo o seu projeto.

## Veja também

* [Visão geral de Entidades](/developers/backend/resources/entities/overview): Saiba sobre configuração de schema do banco de dados
* [Schemas de Entidade](/developers/backend/resources/entities/entity-schemas): Defina a estrutura da sua entidade
* [User Schema](/developers/backend/resources/entities/user-schema): Entidade integrada especial para autenticação de usuário
* [Estrutura do projeto](/developers/backend/overview/project-structure): Como schemas de entidade se encaixam no seu projeto

<Note>Esta página foi traduzida usando IA. Para informações mais precisas e atualizadas, consulte a [versão em inglês](/). </Note>
