Versão: 1.0 (Definitiva)
Tecnologia: Spatie Laravel Permission (RBAC)
Escopo: Definição de papéis (Roles), permissões e regras de escopo (Tenancy/Policies).
Garantir que cada usuário tenha acesso apenas ao que é pertinente à sua função, mantendo segurança e integridade dos dados em ambiente SaaS multi-tenant.
O sistema possui 6 níveis hierárquicos de usuários.
| Ícone | Ator (Role) | Chave do Sistema | Interface Principal | Descrição |
|---|---|---|---|---|
| 👑 | Super Admin | super_admin |
Painel Filament | Dono da plataforma (SaaS). Acesso irrestrito, gestão global. |
| 🏟️ | Venue Owner | venue_owner |
App Principal (Flux) | Dono da arena (cliente). Gere negócio, quadras, staff, financeiro local. |
| 🏆 | Organizer | organizer |
App Principal (Flux) | Produtor de torneios. Gestão desportiva (chaves, horários, resultados). |
| 🎓 | Coach | coach |
App Principal (Flux) | Professor. Turmas, presenças e avaliações técnicas (Play Card). |
| 🛡️ | Staff | staff |
App Principal (Flux) | Operacional. Portaria (check-in), bar e manutenção rápida. |
| 🏃 | Player | player |
App Principal (Flux) | Usuário final. Reserva quadras, inscreve-se e vê estatísticas. |
| Ação | 👑 Admin | 🏟️ Owner | 🛡️ Staff | 🏃 Player |
|---|---|---|---|---|
| Criar Arena | ✅ | ❌ | ❌ | ❌ |
| Editar Configs da Arena | ✅ | ✅ | ❌ | ❌ |
| Gerir Quadras (Ativos) | ✅ | ✅ | ❌ | ❌ |
| Declarar Manutenção | ✅ | ✅ | ✅ | ❌ |
| Ver Relatórios Financeiros | ✅ | ✅ | ❌ | ❌ |
| Ação | 🏟️ Owner | 🛡️ Staff | 🏃 Player |
|---|---|---|---|
| Criar Bloqueio (Torneio) | ✅ | ❌ | ❌ |
| Cancelar Reservas de Terceiros | ✅ | ✅ | ❌ |
| Reservar Quadra (Booking) | ✅ | ✅ | ✅ |
| Fazer Check-in (QR Code) | ❌ | ✅ | ❌ |
| Ver Disponibilidade | ✅ | ✅ | ✅ |
| Ação | 🏟️ Owner | 🏆 Organizer | 🏃 Player |
|---|---|---|---|
| Criar Torneio | ✅ | ✅ | ❌ |
| Editar Chaves/Tabela | ✅ | ✅ | ❌ |
| Lançar Resultados (Live Desk) | ✅ | ✅ | ❌ |
| Inscrever-se | ❌ | ❌ | ✅ |
| Validar Resultado (Amistoso) | ❌ | ❌ | ✅ |
| Ação | 🏟️ Owner | 🎓 Coach | 🏃 Player |
|---|---|---|---|
| Criar Turma | ✅ | ❌ | ❌ |
| Editar Turma (nome, horário, treinador) | ✅ | ❌ | ❌ |
| Arquivar / reativar turma | ✅ | ❌ | ❌ |
| Gerir Alunos da Turma | ✅ | ✅ | ❌ |
| Lançar Presença | ❌ | ✅ | ❌ |
| Avaliar Nível (Play Card) | ❌ | ✅ | ❌ |
| Ver turmas em que está inscrito | ❌ | ❌ | ✅ |
| Sair da turma (remover própria inscrição) | ❌ | ❌ | ✅ |
| Ver Própria Evolução | ❌ | ❌ | ✅ |
Apenas ter a permissão “X” não é suficiente: é necessário garantir o isolamento de dados por contexto (arena, autoria, vínculo). Essas regras devem ser implementadas via Policies do Laravel e/ou constraints de query.
venue_ownerowner_user_id da Arena deve corresponder ao id do utilizador.organizercreator_id é ele mesmo.venue_owner da arena onde o torneio ocorre tem permissão superior (“supervisão”) para cancelar o evento se necessário.staffstaff_contracts).coachcoach e permissão Spatie academy.coach.credentialed (atribuída pontualmente, ex. por super_admin) podem alterar atributos técnicos oficiais (saque, smash, etc.) no Play Card de um aluno. Método de conveniência: User::isAcademyCredentialedCoach().Kolos\Modules\Identity\Domain\Enums\RoleName.venue.manage, booking.create, booking.cancel_others) e aplicadas com permission/role_or_permission + Policies.web (padrão). Roles/permissões devem ser criadas com o guard_name correto.App\Models\User com RBAC; o acesso ao painel deve exigir role super_admin.