> ## Documentation Index
> Fetch the complete documentation index at: https://docs.assessiq.digital/llms.txt
> Use this file to discover all available pages before exploring further.

# Roles e Permissões

> Entenda os níveis de acesso e o que cada papel de usuário pode fazer.

## Visão Geral

O AssessIQ usa um sistema de controle de acesso baseado em roles (RBAC). Cada usuário tem um único papel que determina o que ele pode visualizar e fazer na plataforma.

## Papéis Disponíveis

<CardGroup cols={3}>
  <Card title="PROFESSOR" icon="chalkboard-teacher">
    Papel padrão para profissionais que aplicam testes.
  </Card>

  <Card title="ADMIN" icon="shield-halved">
    Gerencia usuários, organizações e toda a plataforma.
  </Card>

  <Card title="SUPER_ADMIN" icon="crown">
    Acesso irrestrito incluindo operações críticas de dados.
  </Card>
</CardGroup>

***

## Matriz de Permissões

| Funcionalidade                    | PROFESSOR | ADMIN | SUPER\_ADMIN |
| --------------------------------- | :-------: | :---: | :----------: |
| Criar testes                      |     ✅     |   ✅   |       ✅      |
| Ver testes de outros              |     ❌     |   ✅   |       ✅      |
| Importar testes via JSON          |     ✅     |   ✅   |       ✅      |
| Gerenciar alunos (criar/editar)   |     ✅     |   ✅   |       ✅      |
| **Excluir alunos**                |     ❌     |   ✅   |       ✅      |
| Gerenciar professores             |     ❌     |   ✅   |       ✅      |
| Gerenciar candidatos              |     ✅     |   ✅   |       ✅      |
| Ver relatórios próprios           |     ✅     |   ✅   |       ✅      |
| Ver todos os relatórios           |     ❌     |   ✅   |       ✅      |
| KPI "Testes Concluídos" global    |     ❌     |   ✅   |       ✅      |
| Gerenciar usuários                |     ❌     |   ✅   |       ✅      |
| Gerenciar organizações            |     ❌     |   ✅   |       ✅      |
| Configurar notificações           |     ❌     |   ✅   |       ✅      |
| Templates de e-mail               |     ❌     |   ✅   |       ✅      |
| **Backup e recuperação de dados** |     ❌     |   ❌   |       ✅      |
| **Gerência de retenção**          |     ❌     |   ❌   |       ✅      |
| **Logs em tempo real**            |     ❌     |   ❌   |       ✅      |

***

## Como os Roles são Verificados

O sistema valida permissões em dois lugares:

### 1. Server Components / API Routes

```ts theme={null}
import { auth } from "@/auth";

const session = await auth();
const userRole = session?.user?.role;
const isAdmin = userRole === "ADMIN" || userRole === "SUPER_ADMIN";
```

### 2. Client Components

```tsx theme={null}
const { data: session } = useSession();
const isAdmin = session?.user?.role === "ADMIN" || 
                session?.user?.role === "SUPER_ADMIN";

// Botão de exclusão visível apenas para admins
{(isAdmin || isSuperAdmin) && (
  <DeleteButton />
)}
```

***

## Atribuindo Roles

Um `SUPER_ADMIN` pode alterar o papel de qualquer usuário via **Admin → Usuários → Editar**.

Um `ADMIN` pode alterar apenas entre `PROFESSOR` e `ADMIN`.

<Warning>
  O papel `SUPER_ADMIN` só pode ser atribuído por outro `SUPER_ADMIN`. Um admin comum não tem acesso a essa opção.
</Warning>
