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

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" 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:

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"