Permissões sem
os if-statements.

Papéis, escopos, condições, atributos — tipados de ponta a ponta e avaliados no edge em menos de 2 ms. Uma única chamada can() substitui o espaguete.

policies/projects.deploy.az
L 12 · C 28authaz/policy● 0 erros
1234567891011121314
// resources, actions, conditions — typed end-to-end
policy "projects.deploy" {
  resource  = Project
  action    = "deploy"

  allow if user.role in ["owner", "admin", "developer"]
  allow if resource.team in user.teams
  allow if user.attrs.level >= 4

  deny  if resource.archived == true
  deny  if request.geo in org.blocked_geos
  deny  if mfa.age > "5m" && resource.tier == "prod"
}
— DECISÃO AO VIVO1.2ms
userval@acme.com · adminactionprojects.deployresourceproj_01HZ · platform
role:admin in [owner,admin,developer]0.4ms
team:platform ∈ user.teams0.3ms
·resource.archived == false0.2ms
·mfa.age = 47s · ok0.3ms
→ ALLOWregistrado · evt_8KQ2
— INSPETOR DE ESCOPOsessão
tenantorg_acmesempre carregado pela sessão
teamplatform · billingderivado das claims de grupo
roleadminherda :developer + :billing-admin
attrsfte · level=5baseado em atributos · ABAC
O modelo

Papéis te levam a 80% do caminho. O Authaz cuida do resto.

RBAC puro quebra no minuto em que seu cliente pede 'admins, mas só para o time deles'. O Authaz deixa você expressar isso — e mais cem variações — sem reconstruir sua autorização.

— 01 · INPUTS

Papéis, escopos, atributos.

Comece com papéis. Adicione escopos (team, region, resource). Adicione atributos (level, FTE, tipo de contrato). Componha tudo; a gente avalia.

roletenantteamregionnívelvínculomfa.age
— 02 · ENGINE

Uma chamada can.enforce().

Avaliado no edge, em menos de 2 ms. Combina RBAC + ABAC + escopos de recurso contra suas políticas tipadas. Retorna allow / deny com a regra que casou.

p50 0.7msp99 1.4ms47 regiõesversionadocomparável
— 03 · OUTPUTS

Decisão + trilha de auditoria.

allow / deny tipado dentro do seu código. Cada decisão vai por stream pro seu SIEM com os inputs, a política que casou e o veredito — replay-able.

allowdenyparcialaudit-evtsiemreplay
A matriz

Papéis que você enxerga de relance.

Todo projeto começa aqui: uma grade papel × ação que mostra exatamente quem pode fazer o quê. Faça override por tenant na mesma UI.

tenantorg_acme/policyv17/live
+ novo papel+ nova açãooverrides · 3simulardiff →
papel ↓
ação →
read
100%
write
57%
deploy
43%
invite
71%
billing
43%
audit
86%
tokens
43%
delete
43%
admin
29%
escopo
owner
org
admin
owner − billing
mfa
org
developer
admin − admin
team
·
if
team
team
·
team:platformteam:billing
reviewer
developer (read)
if
·
·
·
·
·
·
team:platform
billing-admin
+ billing.*
·
·
·
·
·
billing.*
support
reviewer + impersonate
·
if
·
·
·
·
tenant in cohort:enterprise
guest
— (read-only)
if
·
·
·
·
·
·
·
·
expires 7d
legenda allow· denyif condiçãoteam teammfa mfa override
7 papéis · 9 ações · 3 overrides · última edição há 4min por@maya
Peças

Tudo que um modelo de autorização toca.

— 01

Um escopo é mais do que um tenant id.

Tenant, team, role, atributos, resource. O Authaz costura os cinco em cada decisão — assim suas políticas podem ramificar no que o comprador se importa: geo, tipo de contrato, idade do MFA, qualquer coisa.

  • preso à sessão · à prova de forja
  • ABAC + RBAC, componíveis
  • adicione um escopo sem migration
tenant
org_acme
sempre carregado pela sessão
team
team:platform · team:billing
derivado das claims de grupo
role
admin
herda :developer + :billing-admin
attrs
employee_type=fte · level≥4
baseado em atributos · ABAC
res
proj_01HZ · status=active
filtro ciente do recurso
— 02

Políticas que se leem como inglês.

Defina regras na nossa linguagem de política — ou em TypeScript ao lado do seu app. As duas compilam para o mesmo engine. As duas são revisáveis por diff.

  • versionado · diffável · com rollback
  • TypeScript ou DSL, você escolhe
  • simulador roda cada branch em dados reais
// resources, actions, conditions — typed end-to-end policy "projects.write" { allow if user.role in ["owner", "admin", "developer"] allow if resource.team in user.teams deny if resource.archived == true deny if request.geo in org.blocked_geos }
— 03

Cada decisão, rastreada e auditável.

Cada can() emite um evento de auditoria com os inputs, a política que casou e o veredito. Faça stream pro Datadog, S3 ou seu SIEM.

  • allow / deny / partial
  • p99 abaixo de 2ms
  • replay a partir do log de auditoria
userval@acme.com · adminactionprojects.deployresproj_01HZ · team:platform
✓ role:admin → projects.* · allow0.4ms
✓ team:platform ∈ user.teams · allow0.3ms
✗ resource.archived == false · ok0.2ms
→ ALLOW · projects.deploy on proj_01HZ
Código

Uma chamada. Mesmo formato, em todo endpoint.

app/api/projects/[id]/deploy.tstyped
await authaz.can.enforce({ user: session.user, action: "projects.deploy", resource: project, }); // continua só se for allow — caso contrário lança PermissionDenied await deployer.queue(project);
Spec

A letra miúda, na frente.

Modelo
RBAC + ABAC + escopos de recurso · componível
Latência de decisão
p50 0.7ms · p99 1.4ms · edge global
Papéis customizados
ilimitados por org · herança · override por escopo
Recursos
tipados no seu código · SDK auto-gerado · rename seguro
Condições
papel · time · atributo · tempo · geo · risco · função customizada
Auditoria
cada check · em stream · exportável para S3, Datadog, seu SIEM
Tooling
simulador · explain · diff · rollback
Modelo de preço
checks ilimitados · cobrado por usuário ativo
Combina com

Uma plataforma. Toda primitiva.

Todo produto Authaz compartilha as mesmas primitivas — sessões, políticas, auditoria, tenants. Escolha o que precisa hoje; adicione o resto quando precisar.

Explorar todos os produtos →
Começar

Pare de ramificar em user.role.

Papéis, escopos, atributos — uma chamada, decisões em menos de 2 ms, auditadas toda vez.