# Gestão de Permissões

## O que é o módulo

Gerencia usuários administrativos, perfis de acesso (RBAC V2) e permissões do CMS. Permite cadastrar novos usuários (via Sentinel), associar perfis de acesso V2 a usuários, e criar/editar/excluir perfis V2 com permissões granulares por módulo. Integra com o sistema de permissões do V2 (via `PermissionService`) e registra todas as operações no ActivityLogger.

## Estrutura de dados

Este módulo **não possui modelos próprios**. Utiliza:

- **V2Role** (`V2\Core\Models\V2Role`) — tabela `v2_roles` (criada pelo Core V2)
  - `id` (UUID PK), `name`, `slug`, `permissions` (jsonb), `created_at`, `updated_at`, `deleted_at`
- **User** (`App\Admin\User`) — tabela `users` (Sentinel V1)
  - campos do Sentinel + `v2_role_id` (FK para v2_roles.id)

## Dependências

- **PermissionService** (`V2\Core\Services\PermissionService`) — CRUD de roles V2, associação usuário-perfil, contagem de usuários
- **ActivityLoggerService** (`V2\Services\ActivityLogger`) — auditoria de criação/atualização de usuários e perfis
- **Sentinel** — registro, ativação e autenticação de usuários

## Tabelas

- `v2_roles` (criada pelo Core V2, não pelo módulo)
- `users` (Sentinel V1, com coluna extra `v2_role_id`)

## Arquivos existentes

### Controllers
- `Controllers/GestaoPermissoesPermissionsController.php` — CRUD de usuários (index, create, store, edit, update) + associação de perfil V2
- `Controllers/GestaoPermissoesRolesController.php` — CRUD de perfis V2 (index, create, store, edit, update, destroy)

### Routes
- `Routes/cms.php` — 10 rotas CMS (permissions index/create/store/edit/update, roles index/create/store/edit/update/destroy)

### Views
- `Views/permissions/index.blade.php` — listagem de usuários com paginação
- `Views/permissions/create.blade.php` — cadastro de novo usuário
- `Views/permissions/edit.blade.php` — edição de perfil de acesso do usuário
- `Views/roles/index.blade.php` — listagem de perfis V2 com contagem de usuários
- `Views/roles/create.blade.php` — criação de perfil V2 (seleção de permissões por módulo)
- `Views/roles/edit.blade.php` — edição de perfil V2

### ModuleProvider
- `ModuleProvider.php` — configuração com 2 submódulos (Permissões e Usuários, Perfis de Acesso V2)

## Observações

- **Sem modelos próprios:** o módulo consome `V2\Core\Models\V2Role` e `App\Admin\User`. Não possui models, migrations ou services próprios no diretório do módulo.
- **Super-admin:** a atribuição manual do papel `super-admin` via Sentinel é bloqueada no controller. O perfil `super-admin` só existe em código-fonte e não pode ser criado via interface.
- **Slug reservado:** slugs com valor `super-admin` são rejeitados tanto na criação quanto na edição de perfis.
- **Módulos restritos:** durante criação/edição de perfis, módulos marcados como `restricted` nas configurações do core são removidos automaticamente das permissões submetidas.
- **Permissão de escrita:** todas as ações de write (create, edit, update, destroy) em ambos os controllers exigem `v2_can('GestaoPermissoes', 'write')`. Usuários sem essa permissão recebem 403.
- **ActivityLogger:** a auditoria é registrada com try/catch — falhas no log não interrompem o fluxo principal.
- **Roles V1 vs V2:** o sistema mantém dois layers de permissão: Sentinel Roles (V1, tabela `roles`) e Perfis de Acesso V2 (tabela `v2_roles`). O módulo gerencia ambos: o papel V1 é associado no cadastro do usuário, e o perfil V2 pode ser associado/alterado separadamente.
- **Rota de delete:** usa `POST .../delete` em vez de `DELETE` (comum em projetos Laravel 5.5 que não usam method spoofing consistente).
