Skip to main content
Esta página faz parte de uma habilidade de agente de código IA e é escrita para agentes, não para humanos. Para a documentação legível por humanos da Base44, veja a documentação para desenvolvedores.

Criando Entidades

As entidades Base44 são definidas localmente no seu projeto e depois enviadas ao backend Base44.

Crítico: Nomenclatura de arquivo

Arquivos de entidade DEVEM usar nomenclatura kebab-case: {kebab-case-name}.jsonc ERRADO: TeamMember.jsonc, teamMember.jsonc CERTO: team-member.jsonc

Índice

Diretório de entidades

Todas as definições de entidade devem ser colocadas na pasta base44/entities/ na raiz do seu projeto. Cada entidade é definida em seu próprio arquivo .jsonc. Estrutura de exemplo:

Como criar uma entidade

  1. Crie um novo arquivo .jsonc no diretório base44/entities/
  2. Defina seu schema de entidade seguindo a estrutura abaixo
  3. Envie as alterações para a Base44 usando a CLI

Estrutura do schema da entidade

Cada arquivo de entidade segue uma estrutura semelhante ao JSON Schema:

Erro comum: Propriedade schema aninhada

ERRADO - NÃO envolva propriedades em um objeto schema:
CORRETO - Coloque type e properties no nível superior:
Este é um erro comum que causará “Invalid schema: Schema must have a ‘type’ field” ao enviar entidades.

Tipos de campo suportados

String

Campo de texto básico:
Com formato:
Formatos disponíveis: date, date-time, time, email, uri, hostname, ipv4, ipv6, uuid, file, regex, richtext

String com Enum

Restrito a valores específicos:

Number

Integer

Apenas para números inteiros:

Binary

Para dados de arquivo/blob:

Boolean

Array de Strings

Array de Objetos

Propriedades de campo

Exemplo completo

Aqui está uma definição completa de entidade para uma Task:

Convenções de nomenclatura

  • Nome da entidade: Use PascalCase apenas com caracteres alfanuméricos (por exemplo, Task, TeamMember, ActivityLog)
    • Deve corresponder ao padrão: /^[a-zA-Z0-9]+$/
    • Válido: Task, TeamMember, Order123
    • Inválido: Team_Member, Team-Member, Team Member
  • Nome do arquivo: Use kebab-case correspondente à entidade (por exemplo, task.jsonc, team-member.jsonc, activity-log.jsonc)
  • Nomes de campo: Use snake_case (por exemplo, board_id, user_email, due_date)

Relacionamentos entre entidades

Para criar relacionamentos entre entidades, use campos de referência de ID:

Row Level Security (RLS)

O Row Level Security (RLS) controla quais registros os usuários podem acessar com base na sua identidade e atributos. Regras RLS são definidas por entidade dentro do campo rls do schema. Importante: Se nenhum RLS for definido, todos os registros são acessíveis a todos os usuários.

Operações RLS

O RLS suporta cinco operações:

Valores de permissão

Cada operação aceita um dos seguintes valores:
  1. true - Permitir todos os usuários (incluindo anônimos/não autenticados)
  2. false - Bloquear todos os usuários
  3. Objeto de condição - Permitir usuários que correspondem à condição

Variáveis de template

Use variáveis de template para referenciar os atributos do usuário atual:

Atributos de entidade integrados

Cada registro de entidade tem esses atributos integrados disponíveis para regras RLS:

Tipos de regra

Existem dois tipos de condição que você pode usar: 1. Comparação entidade-usuário - Compare campos de registro aos valores do usuário atual:
2. Verificação de condição de usuário - Verifique propriedades do usuário diretamente usando user_condition:
Notas importantes:
  • user_condition suporta apenas igualdade simples (por exemplo, { "role": "admin" })
  • A filtragem de campo de entidade requer prefixo data.: Use { "data.fieldname": value } para filtrar por valores de campo de entidade
  • Para comparações de campos data.*, você pode usar operadores: $in, $nin, $ne, $all
  • Operadores lógicos $or, $and, $nor estão disponíveis para combinar condições
⚠️ Para padrões RLS avançados e exemplos, veja rls-examples.md

Exemplos RLS

Acesso apenas do proprietário:
Acesso baseado em departamento:
Acesso apenas de administrador:
Configuração RLS completa:

Padrões RLS comuns

Criação pública, gerenciamento apenas de administrador (por exemplo, formulários de contato, listas de espera):
Acesso apenas do proprietário:
Apenas usuários logados:

Limitações

  • user_condition é apenas igualdade: user_condition só suporta correspondência exata (por exemplo, { "role": "admin" }) - sem operadores
  • Sem operadores de comparação em user_condition: $gt, $lt, $regex, $expr, $where NÃO são suportados para condições de usuário
  • Sem templates profundamente aninhados: Templates como {{user.data.profile.department}} podem não funcionar
Operadores suportados:
  • Operadores lógicos: $or, $and, $nor para combinar várias condições
  • Operadores de campo (para campos data.* apenas): $in, $nin, $ne, $all
  • Filtragem de campo de entidade: Use o prefixo data. para filtrar por valores de campo de entidade (por exemplo, { "data.status": "published" } ou { "data.completed": true })
⚠️ Veja rls-examples.md para padrões RLS abrangentes e exemplos

Padrões de acesso complexos

Para padrões de acesso complexos que requerem várias condições (por exemplo, “proprietário OU administrador”), você tem duas opções:
  1. Use a interface do painel Base44 - O painel permite adicionar várias regras por operação com lógica OR
  2. Use entidades separadas - Divida os dados em várias entidades com diferentes regras de acesso
  3. Use funções de backend - Implemente lógica de acesso personalizada em funções de backend

Field Level Security (FLS)

O Field Level Security permite controlar o acesso a campos individuais dentro de uma entidade. Regras FLS são definidas dentro do schema de cada campo usando a propriedade rls.

Operações FLS

O FLS suporta as mesmas operações que o RLS no nível de entidade:

Exemplo FLS

Neste exemplo, apenas usuários com a função hr podem ler ou atualizar o campo salary. Todos os usuários com acesso à entidade podem ler/atualizar outros campos.

Notas FLS

  • Se nenhum RLS em nível de campo for definido, o campo herda as regras RLS em nível de entidade
  • Regras FLS seguem o mesmo formato de condição que o RLS em nível de entidade
  • Use FLS para campos sensíveis como salário, CPF ou notas internas

Enviando entidades

O comando entities push envia todas as entidades que existem na pasta base44/entities.
Para mais detalhes sobre o comando push, veja entities-push.md.
Esta página foi traduzida usando IA. Para informações mais precisas e atualizadas, consulte a versão em inglês.