- 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
119 lines
4.4 KiB
Markdown
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"`
|