photum/backend/docs/AGENDA_VIEWER_ROLE.md
JoaoVitorMS0 93d603da6c feat: implementa visualização de agenda para profissionais e melhorias no sistema
- Adiciona role 'agenda_viewer' para profissionais visualizarem apenas suas agendas
- Implementa middleware de autorização baseado em roles
- Adiciona validação de permissões nos endpoints de agenda
- Melhora exibição de dados financeiros e logísticos
- Atualiza componentes frontend para melhor UX
- Adiciona documentação sobre o papel de visualização de agenda
2026-01-19 17:06:27 -03:00

119 lines
4.4 KiB
Markdown

# Role: AGENDA_VIEWER
## Descrição
A role `AGENDA_VIEWER` foi criada para usuários internos da empresa Photum que precisam visualizar informações da agenda, mas sem permissão para modificar dados ou acessar informações de logística.
## Características
### Permissões (O que pode fazer)
-**Ver lista completa da agenda**: Acesso completo à listagem de eventos
-**Ver detalhes dos eventos**: Pode visualizar todas as informações detalhadas de cada evento
-**Ver profissionais alocados**: Pode ver quais profissionais estão designados para cada evento
-**Ver escala de profissionais**: Pode visualizar os horários e alocações da equipe
-**Ver informações gerais**: Datas, locais, horários, observações, etc.
### Restrições (O que NÃO pode fazer)
-**Criar novos eventos**: Botão de criar evento não aparece
-**Editar eventos existentes**: Sem acesso às operações de escrita
-**Deletar eventos**: Sem permissão de exclusão
-**Modificar equipe**: Não pode adicionar ou remover profissionais
-**Alterar status**: Não pode mudar status de eventos ou alocações
-**Acessar logística**: Toda seção de logística (carros, passageiros) está bloqueada
-**Criar/editar escalas**: Visualiza mas não pode modificar
## Implementação Técnica
### Backend
- **Constante**: `RoleAgendaViewer = "AGENDA_VIEWER"` em `internal/auth/service.go`
- **Middlewares**:
- `RequireWriteAccess()`: Bloqueia todas operações de escrita (POST, PUT, DELETE, PATCH)
- `RequireLogisticsAccess()`: Bloqueia todo acesso ao grupo `/logistica`
### Frontend
- **Enum**: `AGENDA_VIEWER` adicionado em `types.ts`
- **Navbar**: Menu exibe apenas "Agenda"
- **Dashboard**: Botão "Novo Evento" não aparece
- **EventDetails**: Seção de logística não é renderizada
- **EventScheduler**: Formulário de adicionar profissionais não aparece
## Endpoints Disponíveis
### Leitura (Permitido)
```
GET /api/agenda - Listar eventos
GET /api/agenda/:id - Ver detalhes do evento
GET /api/agenda/:id/professionals - Ver profissionais do evento
GET /api/agenda/:id/available - Ver profissionais disponíveis
GET /api/escalas - Ver escalas
```
### Escrita (Bloqueado - 403 Forbidden)
```
POST /api/agenda - Criar evento
PUT /api/agenda/:id - Editar evento
DELETE /api/agenda/:id - Deletar evento
POST /api/agenda/:id/professionals - Adicionar profissional
PATCH /api/agenda/:id/status - Atualizar status
...etc
```
### Logística (Bloqueado - 403 Forbidden)
```
GET /api/logistica/* - Toda rota de logística
POST /api/logistica/*
PUT /api/logistica/*
DELETE /api/logistica/*
```
## Caso de Uso
Esta role é ideal para:
- Coordenadores que precisam acompanhar a agenda
- Supervisores que monitoram eventos
- Equipe de suporte que precisa consultar informações
- Qualquer pessoa interna que necessite visibilidade sem poder alterar dados
## Criação de Usuário
Para criar um usuário com essa role:
```json
POST /api/auth/register
{
"email": "viewer@photum.com",
"senha": "senha_segura",
"role": "AGENDA_VIEWER",
"nome": "Nome do Visualizador",
"telefone": "+55 11 99999-9999",
"tipo_profissional": ""
}
```
**Nota**: Como é um usuário interno da Photum, não precisa criar perfil de profissional ou cliente.
## Testes
### Teste 1: Login e Navegação
1. Fazer login com usuário AGENDA_VIEWER
2. Verificar que apenas "Agenda" aparece no menu
3. Confirmar que não há botão "Novo Evento"
### Teste 2: Visualização
1. Acessar a lista de eventos
2. Clicar em um evento para ver detalhes
3. Verificar que todos os detalhes são exibidos
4. Confirmar que seção de logística não aparece
### Teste 3: Tentativa de Modificação (deve falhar)
1. Tentar fazer requisição POST/PUT/DELETE para `/api/agenda`
2. Deve retornar `403 Forbidden` com mensagem "você não tem permissão para modificar dados"
### Teste 4: Bloqueio de Logística
1. Tentar acessar `/api/logistica/carros`
2. Deve retornar `403 Forbidden` com mensagem "você não tem permissão para acessar logística"
## Mensagens de Erro
- **Tentativa de escrita**: `"você não tem permissão para modificar dados"`
- **Tentativa de acesso à logística**: `"você não tem permissão para acessar logística"`
- **Token inválido**: `"invalid token"`
- **Sem autenticação**: `"authorization header required"`