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) |
Onde as permissões ficam
Seção intitulada “Onde as permissões ficam”- 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.
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))],});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.