Permissões e papéis
CASL no ERP, permissão na API e o que a extensão declara no manifest. A tela esconde; a API recusa.
O front usa CASL (action + subject no menu). A API valida JWT + tenant + RolesGuard. Esconder o botão não é a regra de negócio: a rota recusa.
Papéis
| Origem | Valores | Efeito |
|---|---|---|
JWT role | admin, user, vendedor, manager, accountant | recorte operacional |
systemRole | SYSTEM_ADMIN | USER | admin de plataforma vê todos os tenants |
| Vendedor | SellerDashboardGuard | dashboards e GET /seller/me no escopo do usuário |
Visibilidade de vendedor: listagens de GET /seller só trazem vendedores reais (FAT000 sem vínculo ou employee.is_seller=true).
Menu
Cada item do sidebar tem menuKey, action e subject. Sem permissão o item não aparece. Extensão declara permissions[] no m3r.json; o validate exige que existam no catálogo da SDK (SdkScope).
Permissões citadas pelos IPs
| Permissão | Onde o catálogo de IP usa |
|---|---|
sales.order.create / update / fulfill / cancel | pedido |
sales.quote.convert | orçamento ↔ pedido (IP ainda não wired) |
sales.return.create | devolução |
sales.pdv.finish | fechamento PDV |
sales.exit.confirm | confirmação de documento de saída (não wired) |
purchase.order.update | pedido de compra (não wired) |
stock.movement.create | movimento de estoque (não wired) |
financial.title.create / financial.payment.create | título / baixa (não wired) |
fiscal.nfe.emit | família IP.FISCAL.* |
extension.storage.read | IP.EXT.SCREEN.ON_LOAD |
Lista completa de códigos: IPs e GET /developer/sdk/catalog.
Datas retroativas
Usuário pode ter canChangeDate, maxDaysBack, maxDaysForward. Fora da janela a API recusa a data do documento.
