# Autorização

O sistema adota dois padrões de permissionamento, sendo eles **RBAC (Role-Based Access Control)** e o **ABAC (Attribute-Based Access Control)** para gerenciar o acesso a rotas e recursos específicos. Isso significa que as permissões são atribuídas com base no cargo e atribuitos do usuário. Por exemplo, consultores não têm acesso aos dados de outros consultores, enquanto administradores podem **OU NÃO** visualizar e gerenciar essas informações dependendo das habilidades atribuidas a seu usuário no sistema.

### RBAC (Controle de Acesso Baseado em Cargos)

Permissionamento baseado no cargo do usuário, contendo uma coletânia de possiveis permissões para aquele grupo. Devido ao ***ABAC*** nem todos os usuários do mesmo cargo podem visualizar os mesmos dados ou realizarem as mesmas ações.

#### **Cargos (Roles)**

Atualmente os cargos existentes na aplicação são:

<table><thead><tr><th width="107.4000244140625">Código</th><th width="134.4000244140625">Descrição</th><th>Permissões</th></tr></thead><tbody><tr><td><code>admin</code></td><td>Administrador</td><td>Controle total sobre o sistema, incluindo todas as operações.</td></tr><tr><td><code>assistant</code></td><td>Assistente</td><td>Acesso a ferramentas de suporte aos consultores e clientes.</td></tr><tr><td><code>manager</code></td><td>Gestor</td><td>Tem acesso aos dados de consultores e clientes da sua equipe.</td></tr><tr><td><code>seller</code></td><td>Consultor</td><td>Pode visualizar e gerenciar seus próprios clientes e dados.</td></tr></tbody></table>

**Como identificar as rotas que cada cargo pode acessar?**

A documentação detalha quais rotas estão disponíveis para cada cargo. Para identificar as permissões associadas a uma rota específica, consulte a lista de cargos permitidos, fornecida na documentação, que aparecem no seguinte formato:

{% hint style="info" icon="shield-keyhole" %}
**Cargos permitidos:**

`Administrador` `Assistente`
{% endhint %}

### ABAC (Controle de Acesso Baseado em Atributos)

Permissionamento baseado nos atributos do usuário, isso permite ao sistema uma maior segregação de funções, podendo existir usuários com mesmo nivel de acesso, porém com funções totalmente distintas, exemplo:

```mermaid
flowchart TB
    SYS([Cargo: Administrador])

    U1[Função: Administrador de Estoque]
    U2[Função: Administrador Financeiro]

    subgraph ESTOQUE["Atributos - Estoque"]
        E1["view_sellers"]
        E2["view_seller_inventory"]
        E3["add_terminal_to_customer"]
        E4["remove_terminal_from_customer"]
        E5["edit_inventory"]
    end

    subgraph FINANCEIRO["Atributos - Financeiro"]
        F1["view_sellers"]
        F2["view_financial_reports"]
        F3["register_seller_payment"]
        F4["approve_payment"]
        F5["edit_financial_entries"]
    end

    SYS --> U1
    SYS --> U2

    U1 --> ESTOQUE
    U2 --> FINANCEIRO
```

#### Atributos (Abilities)

Os atributos representam permissões específicas que determinam quais ações um usuário pode executar dentro do sistema. Diferente do RBAC, onde o acesso é definido apenas pelo cargo, no ABAC cada usuário pode possuir um conjunto próprio de abilities.

Por exemplo, dois usuários com cargo de Administrador podem ter acessos diferentes:

* Um administrador pode visualizar relatórios financeiros;
* Outro administrador pode apenas gerenciar estoque;
* Ambos possuem o mesmo cargo, mas abilities diferentes.

**Como identificar os atributos necessários para acessar uma rota?**

Além dos cargos permitidos, algumas rotas exigem que o usuário possua determinadas abilities.

Na documentação, essas permissões aparecem no seguinte formato:

{% hint style="info" icon="id-card" %}
**Abilities obrigatórias:**

`view_sellers` , `view_financial_reports`
{% endhint %}

Caso o usuário possua o cargo correto, mas não tenha uma das abilities exigidas, o acesso à rota será negado. O contrário também combinará na negação do acesso a essa rota.

#### Exemplo de combinação entre RBAC e ABAC

Uma rota pode permitir acesso apenas para usuários com cargo de Administrador e que possuam uma ability específica.

Exemplo:

* Cargo permitido: `Administrador`
* Ability obrigatória: `view_financial_reports`&#x20;

Nesse cenário:

* Um administrador com a ability `view_financial_reports` poderá acessar a rota;
* Um administrador sem essa ability não poderá acessar;
* Um usuário com outro cargo também não poderá acessar, mesmo que tenha a ability.

#### Observações

* O cargo define o grupo de acesso inicial do usuário;
* As abilities refinam quais ações aquele usuário poderá executar;
* Nem todos os usuários do mesmo cargo possuem exatamente as mesmas permissões;
* Caso uma rota não possua abilities obrigatórias, apenas a validação de cargo será aplicada.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.altpaybr.com.br/documentation/api-integration/authorization.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
