- 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
4.4 KiB
4.4 KiB
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"eminternal/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_VIEWERadicionado emtypes.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:
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
- Fazer login com usuário AGENDA_VIEWER
- Verificar que apenas "Agenda" aparece no menu
- Confirmar que não há botão "Novo Evento"
Teste 2: Visualização
- Acessar a lista de eventos
- Clicar em um evento para ver detalhes
- Verificar que todos os detalhes são exibidos
- Confirmar que seção de logística não aparece
Teste 3: Tentativa de Modificação (deve falhar)
- Tentar fazer requisição POST/PUT/DELETE para
/api/agenda - Deve retornar
403 Forbiddencom mensagem "você não tem permissão para modificar dados"
Teste 4: Bloqueio de Logística
- Tentar acessar
/api/logistica/carros - Deve retornar
403 Forbiddencom 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"