# Authentication

Login, logout, recuperação de senha e tokens Sanctum — Core Platform.

**Sprint 001 · Etapa 4**

## Rotas (`/api/v1/auth`)

| Método | Rota | Descrição |
|--------|------|-----------|
| POST | `login` | Retorna Bearer token (Sanctum) |
| POST | `logout` | Revoga token atual |
| GET | `me` | Usuário autenticado |
| POST | `forgot-password` | Envia e-mail de reset |
| POST | `reset-password` | Redefine senha |

## Rotas web (Etapa 7)

| Método | Rota | Descrição |
|--------|------|-----------|
| GET | `/login` | Login (sessão) |
| POST | `/login` | Autenticar |
| GET | `/dashboard` | Dashboard shell |
| POST | `/logout` | Sair |

Views: `backend/resources/views/` — layouts `guest` + `app`, partials sidebar/header/footer.

Todas as rotas públicas exigem `tenant_slug` no body (multi-tenant).

Rotas protegidas: `auth:sanctum` → `tenant.resolve` → `tenant.active`.

## Camadas

```text
Application/Actions/     Login, Logout, SendPasswordResetLink, ResetPassword
Infrastructure/Http/     Controller, Requests, Resources
Infrastructure/Routes/   api.php
```

Middleware tenant: package `Tenancy` (`ResolveTenant`, `EnsureTenantIsActive`, `TenantContext`).

## RBAC (Etapa 5)

Papéis por tenant: **Admin** · **Corretor** · **Gestor** (somente estes).

- `SystemRole` enum + `RoleProvisioner`
- `HasRoles` no User · middleware `role:Admin|Gestor|...`
- Seeder: `php artisan db:seed --class=TenantRolesSeeder`

Sem permissões granulares na V1 inicial.

**Fora de escopo V1:** 2FA, SSO, registro.
