Pular para o conteúdo

Permissões e papéis

Uma permissão diz que um papel pode fazer uma ação num recurso. Quem chama pelo navegador (sessão do usuário) só vê e altera o que as permissões deixam. Quem chama com chave de API não passa por elas: vale o escopo da chave.

Permission. Vale para
read(papel) ler
create(papel) criar (em tabelas e buckets)
update(papel) alterar
delete(papel) apagar
write(papel) atalho para create, update e delete
Role. Quem
any() qualquer pessoa, logada ou não
guests() só quem não está logado
users() qualquer usuário logado (users('verified'): só com e-mail confirmado)
user(id) um usuário específico
team(id) membros do time (team(id, 'editor'): só com o papel editor no time)
member(id) uma participação específica num time
label(nome) usuários com esse rótulo (os rótulos são dados pelo servidor)
  • Na tabela ou no bucket: valem para todas as linhas ou arquivos. É o caso mais simples.
  • Em cada linha ou arquivo: ligue a segurança por linha (tabela) ou as permissões por arquivo (bucket). As permissões do item somam com as do contêiner.
permissoes.ts (navegador)
import { ID, Permission, Role, TablesDB } from '@owbase/web';
import { client } from './client';
const db = new TablesDB(client);
const autor = '<ID_DO_USUARIO>';
// Pelo navegador, o usuário só concede papéis que ele mesmo tem: o próprio ID, os times dele, "users" e "any".
// Aqui, qualquer pessoa lê; só o autor edita e apaga.
await db.createRow({
databaseId: 'loja',
tableId: 'avaliacoes',
rowId: ID.unique(),
data: { nota: 5, texto: 'Chegou rápido.' },
permissions: [Permission.read(Role.any()), Permission.update(Role.user(autor)), Permission.delete(Role.user(autor))],
});
permissoes.ts (servidor)
import { ID, Permission, Role, TablesDB } from '@owbase/node';
import { client } from './client';
// A chave precisa do escopo rows.write. Com chave de API, dá para conceder acesso a qualquer usuário ou time.
const db = new TablesDB(client);
const autor = '<ID_DO_USUARIO>';
// Só o autor lê, edita e apaga; quem é do time "moderacao" também lê.
await db.createRow({
databaseId: 'loja',
tableId: 'avaliacoes',
rowId: ID.unique(),
data: { nota: 5, texto: 'Chegou rápido.' },
permissions: [
Permission.read(Role.user(autor)),
Permission.update(Role.user(autor)),
Permission.delete(Role.user(autor)),
Permission.read(Role.team('moderacao')),
],
});

Detalhes do banco em Permissões no banco; do storage, em Buckets.