Skip to main content

Permission

Cada Permission é um par action:resource que representa uma capacidade específica no sistema.

Formato

action:resource
ComponenteDescriçãoExemplos
actionA operação permitidacreate, read, update, delete
resourceO recurso alvotrip, order, vehicle, driver, route

Catálogo de Permissions

O catálogo é controlado pelo DEVMOB e usado pelas superfícies Ops e BackOffice. Cada entrada declara em quais API surfaces (ops, bko) ela é aceita e a quais tipos de organização ela se aplica (Company, Cooperative ou Todas). O tipo de organização define a composição da role admin padrão criada com cada organização.

Organização & acesso

PermissionDescriçãoAPIsEscopo
read:organizationVisualizar perfil da organizaçãobko, opsTodas
update:organizationAtualizar perfil da organizaçãobko, opsTodas
read:roleListar rolesbko, opsTodas
create:roleCriar rolesbko, opsTodas
update:roleAtualizar rolesbko, opsTodas
delete:roleRemover rolesbko, opsTodas
read:memberListar membrosbko, opsTodas
create:memberConvidar novo membrobko, opsTodas
update:memberAtualizar um membrobko, opsTodas
delete:memberRevogar um membrobko, opsTodas
read:userListar usuáriosbkoBackOffice
update:userBloquear ou desbloquear usuáriosbkoBackOffice
read:benefit_categoryListar categorias globais de benefíciobko, opsTodas
create:benefit_categoryCriar categoria global de benefíciobkoBackOffice
update:benefit_categoryAtualizar categoria global de benefíciobkoBackOffice
delete:benefit_categoryRemover categoria global de benefíciobkoBackOffice
read:benefit_programListar programas de benefíciobko, opsTodas
create:benefit_programCriar programa de benefíciobko, opsTodas
update:benefit_programAtualizar programa de benefíciobko, opsTodas
delete:benefit_programRemover programa de benefíciobkoBackOffice
read:inviteListar convites pendentesbko, opsTodas
create:inviteCriar convites de membrosbko, opsTodas
delete:inviteRevogar convites de membrosbko, opsTodas
read:auditListar entradas do log de auditoriaopsTodas

Frota

PermissionDescriçãoAPIsEscopo
read:vehicleListar veículos da frotaopsCompany
create:vehicleRegistrar novos veículosopsCompany
update:vehicleAtualizar informações de veículosopsCompany
delete:vehicleRemover veículos da frotaopsCompany
read:seat-typeListar sugestões de tipos de assentoopsCompany
read:driverListar motoristasopsCompany
create:driverRegistrar novo motoristaopsCompany
update:driverAtualizar informações do motoristaopsCompany
delete:driverRemover motoristaopsCompany

Operações

PermissionDescriçãoAPIsEscopo
read:pointListar catálogo global de pontosbko, opsTodas
create:pointCriar ponto no catálogo globalbkoBackOffice
update:pointAtualizar ponto no catálogo globalbkoBackOffice
delete:pointRemover ponto no catálogo globalbkoBackOffice
read:routeListar rotasopsCompany
create:routeCriar rotaopsCompany
update:routeAtualizar rotaopsCompany
delete:routeRemover rotaopsCompany
read:tripListar viagensopsTodas
create:tripCriar viagemopsCompany
update:tripAtualizar viagemopsCompany
delete:tripCancelar viagemopsCompany
read:trip_scheduleListar agendamentos de viagemopsCompany
create:trip_scheduleCriar agendamentos de viagemopsCompany
update:trip_scheduleAtualizar agendamentos de viagemopsCompany
delete:trip_scheduleRemover agendamentos de viagemopsCompany
create:trip_eventRegistrar evento de viagemopsCompany
read:trip está disponível para todas as organizações, mas criar, atualizar e cancelar viagens é exclusivo de Company.

Vendas

PermissionDescriçãoAPIsEscopo
read:checkoutListar checkoutsbko, opsCompany
read:orderListar pedidos de vendabko, opsCompany
create:orderCriar pedido de vendaopsCompany
update:orderCancelar pedido de vendaopsCompany
read:ticketListar ticketsopsCompany
create:ticketEmitir ticketopsCompany
update:ticketAtualizar ticketopsCompany
delete:ticketCancelar ticketopsCompany

Billing

PermissionDescriçãoAPIsEscopo
read:bank_accountVisualizar conta bancáriabko, opsTodas
update:bank_accountDefinir conta bancáriaopsTodas
read:paymentListar pagamentosbko, opsTodas
read:balanceVisualizar saldo financeiroopsTodas
read:receivableListar recebíveisbko, opsTodas
read:transferListar transferênciasbko, opsTodas
create:transferSolicitar transferênciaopsTodas
Permissions com escopo BackOffice não pertencem a nenhum tipo de organização. Elas só fazem sentido para roles INTERNAL.

Claims de acesso à API

Além das permissions do catálogo, existem três claims derivados — access:ops, access:bko e access:driver — que liberam o ingresso em cada API surface. Eles não são atribuídos como entidade própria: aparecem no Profile a partir dos vínculos ativos do usuário.
ClaimDerivado quando
access:opsO usuário possui Membership ACTIVE em uma organização com Role ENVIRONMENT ou ORGANIZATION
access:bkoO usuário possui Membership ACTIVE com Role INTERNAL
access:driverO usuário possui vínculo ativo como motorista em uma empresa

Role

Uma Role agrupa um conjunto de permissions sob um nome descritivo.
CampoDescrição
roleIdIdentificador único
organizationIdOrganização dona da role; preenchido apenas para ORGANIZATION
typeTipo da role: INTERNAL, ENVIRONMENT ou ORGANIZATION
nameNome da role (ex.: “Admin”, “Operador”)
descriptionDescrição da role (opcional)
createdByUsuário que criou a role, quando aplicável
createdAtTimestamp da criação
updatedByUsuário que fez a última atualização, quando aplicável
updatedAtTimestamp da última atualização
deletedByUsuário que removeu a role, quando aplicável
deletedAtTimestamp de remoção lógica
As permissions atribuídas à Role vivem em RolePermission, não em um campo próprio da Role. Uma Role pode ter três tipos:
RoleTypeRegra
INTERNALFora de organização; usada apenas no BackOffice.
ENVIRONMENTGlobal e reutilizável por organizações; a organização é definida na Membership.
ORGANIZATIONCustomizada por uma organização; exige organizationId.
Roles ORGANIZATION são customizáveis por organização. A Company A pode ter uma role “Supervisor” com permissions diferentes da role “Supervisor” da Company B.

Role admin padrão

A role admin padrão é uma Role ENVIRONMENT compatível com o tipo da organização. No onboarding, o owner recebe uma Membership ACTIVE na nova organização apontando para essa role. Assim, organizações podem reutilizar roles padrão, enquanto roles ORGANIZATION continuam disponíveis para customização local.

Atribuição via Membership

Membership é o ponto de encontro entre User, Organization e Role. Um usuário pode acumular mais de uma role na mesma organização.
CampoDescrição
membershipIdIdentificador único da Membership
userIdReferência ao User
organizationIdReferência à Organization; null apenas para role INTERNAL
roleIdReferência à Role atribuída
statusEstado do vínculo (ACTIVE ou REVOKED)
revokedAtTimestamp da revogação, quando aplicável
revokedByUsuário que revogou o vínculo, quando aplicável
createdByUsuário que criou o vínculo, quando aplicável
createdAtTimestamp da criação
updatedByUsuário que fez a última atualização, quando aplicável
updatedAtTimestamp da última atualização

Exemplo Prático

User: joao@email.com
├── Membership (Company "TransBrasil")
│   └── Role: "Gerente de Operações"
│       ├── create:trip
│       ├── update:trip
│       ├── read:order
│       └── read:receivable

└── Membership (Cooperative "Metropolitana")
    └── Role: "Coordenador"
        ├── read:organization
        ├── read:trip
        └── read:order

Verificação de Permissão

A cada requisição autenticada:
  1. O access token identifica o usuário.
  2. O Profile precisa estar ativo; caso contrário a requisição é rejeitada (403).
  3. Se a rota exige uma API surface, o claim access:{api} correspondente é conferido.
  4. As permissions efetivas são comparadas com a permission exigida pela ação.
O conjunto de permissions efetivas é a união dos claims derivados, das permissions das roles INTERNAL e das permissions das roles ENVIRONMENT/ORGANIZATION da organização ativa. Somente Memberships ACTIVE entram nessa composição. Um Profile resolve no máximo uma organização ativa.
Quando uma ação aceita múltiplas permissions, basta possuir uma delas, salvo quando a própria ação exige todas. A organização ativa restringe o escopo da operação.
Se o usuário não possui Membership ACTIVE na organização ativa, ou se o scope.permissionIds não contém a permission exigida, a requisição é rejeitada com 403 Forbidden.