Requisitos do Projeto - ime-usp-br/laravel_11_starter_kit GitHub Wiki
Requisitos do Projeto
Este documento detalha os Requisitos Funcionais (RF - o que o sistema deve fazer) e os Requisitos Não Funcionais (RNF - as qualidades do sistema) ideais para o Projeto Base USP, concebido como um starter kit para aplicações Laravel 11 na Universidade de São Paulo.
A análise do status de implementação baseia-se nos arquivos de código-fonte, configurações e documentação.
Requisitos Funcionais (RF)
Descrevem as funcionalidades essenciais que o projeto base DEVE oferecer ou facilitar.
RF01: Autenticação e Autorização Integrada com Senha Única USP
- RF01.1: Permitir a autenticação de usuários utilizando o sistema centralizado de Senha Única da USP. [Implementado]
- Detalhes: Utiliza
uspdev/senhaunica-socialite
e rotas/controllers específicos (/socialite/login
,/callback
).
- Detalhes: Utiliza
- RF01.2: Implementar um sistema de gestão de papéis (roles) para definir diferentes níveis de acesso. [Implementado (Base)]
- Detalhes: Utiliza
spatie/laravel-permission
. Papéis padrão (admin
,usp_user
,external_user
) são criados viaRolesAndPermissionsSeeder
.
- Detalhes: Utiliza
- RF01.3: Possibilitar a associação de permissões específicas a cada papel. [Implementado (Base)]
- Detalhes: Funcionalidade central do
spatie/laravel-permission
. Permissões Senha Única (hierarquia, vínculo) e permissões de aplicação (guardweb
).
- Detalhes: Funcionalidade central do
- RF01.4: Manter um registro de auditoria (log) das tentativas de autenticação (sucesso/falha). [Parcialmente Implementado (Requer Refinamento)]
- Detalhes: Laravel dispara eventos de login/falha que podem ser logados, mas um log de auditoria específico e detalhado pode precisar de implementação adicional (ex: listener de eventos dedicado).
- RF01.5: Oferecer mecanismos para proteger contra ataques de força bruta (throttling). [Implementado (Padrão Laravel)]
- Detalhes: O
LoginRequest
padrão do Breeze/Laravel já inclui rate limiting.
- Detalhes: O
- RF01.6: Integrar um processo para garantir a identidade do sistema ao usuário durante a autenticação (prevenção de phishing). [Configuração de Ambiente/Servidor]
- Detalhes: Geralmente assegurado por HTTPS (configuração do servidor) e validação do domínio/certificado, não diretamente no código base do framework.
RF02: Gerenciamento Básico de Usuários (Administrativo)
- RF02.1: Fornecer uma interface administrativa básica para gestão de usuários. [Implementado (Base)]
- Detalhes: Rotas
/admin/users
,/admin/users/create/*
, controllerAdminUserController
e views correspondentes.
- Detalhes: Rotas
- RF02.2: Integrar a funcionalidade de busca de usuários no sistema Replicado da USP. [Implementado]
- Detalhes: O controller
AdminUserController::storeUsp
utilizauspdev/replicado
(Pessoa::fetch
,Pessoa::email
).
- Detalhes: O controller
- RF02.3: Permitir a atribuição e revogação de papéis e permissões (guard
web
) aos usuários via interface administrativa. [Implementado (Base)]- Detalhes: A interface de gerenciamento (
/senhaunica-users
, se usada a do pacote) permite associar papéis/permissões do guardweb
. A interface admin deste projeto base (/admin/users
) foca na criação, a edição de papéis/perm precisaria ser adicionada ou usar a interface douspdev/senhaunica-socialite
. Sugestão: Adicionar edição de papéis/permweb
em/admin/users
.
- Detalhes: A interface de gerenciamento (
- RF02.4: Implementar o conceito de "menor privilégio" ao definir permissões para contas de serviço. [Diretriz / A Implementar]
- Detalhes: O projeto base fornece a estrutura (Spatie), mas a aplicação deste princípio depende do desenvolvimento de cada aplicação derivada.
- RF02.5: Manter um histórico de auditoria das ações administrativas (criação, edição, atribuição de papéis). [A Implementar (Detalhado)]
- Detalhes: Similar ao RF01.4, requer logging específico além dos logs gerais do Laravel. Pacotes como
spatie/laravel-activitylog
podem ajudar.
- Detalhes: Similar ao RF01.4, requer logging específico além dos logs gerais do Laravel. Pacotes como
RF03: Utilização do Tema Visual Padrão da USP
- RF03.1: Incorporar o tema visual padrão da USP (
laravel-usp-theme
) como padrão. [Implementado]- Detalhes: Pacote incluído no
composer.json
, layoutlayouts/app.blade.php
estendelaravel-usp-theme::master
.
- Detalhes: Pacote incluído no
- RF03.2: Facilitar a customização do tema, mantendo a base visual. [Suportado (Pelo Tema)]
- Detalhes: O
laravel-usp-theme
permite customizações via publicação de views e configuração. O uso de Tailwind neste projeto permite estilizações adicionais.
- Detalhes: O
RF04: Configurações Essenciais da Aplicação
- RF04.1: Centralizar configurações via arquivos
.env
econfig/
. [Implementado (Padrão Laravel)] - RF04.2: Permitir a configuração de serviços de e-mail (SMTP). [Implementado (Via Configuração)]
- Detalhes: Arquivo
config/mail.php
e variáveisMAIL_*
no.env
.
- Detalhes: Arquivo
- RF04.3: Integrar suporte e configuração para sistemas de cache (Redis, Memcached, etc.). [Implementado (Via Configuração)]
- Detalhes: Arquivo
config/cache.php
e variávelCACHE_STORE
. Drivers comuns do Laravel estão disponíveis.
- Detalhes: Arquivo
- RF04.4: Integrar suporte e configuração para sistemas de filas (BD, Redis, etc.). [Implementado (Via Configuração)]
- Detalhes: Arquivo
config/queue.php
, variávelQUEUE_CONNECTION
e migrations para tabelasjobs
/failed_jobs
.
- Detalhes: Arquivo
- RF04.5: Incluir configurações padrão de segurança (ex: CSRF). [Implementado (Padrão Laravel)]
- Detalhes: Middleware
VerifyCsrfToken
habilitado por padrão no grupoweb
.
- Detalhes: Middleware
RF05: Mecanismos de Segurança Fundamentais
- RF05.1: Implementar validação de entrada de dados robusta no servidor. [Implementado (Via Form Requests)]
- Detalhes: O projeto utiliza Form Requests em
app/Http/Requests/
para validação.
- Detalhes: O projeto utiliza Form Requests em
- RF05.2: Utilizar codificação de saída (output encoding) para prevenir XSS. [Implementado (Padrão Blade)]
- Detalhes: A sintaxe
{{ $variavel }}
do Blade escapa dados por padrão.
- Detalhes: A sintaxe
- RF05.3: Forçar o uso de HTTPS. [Configuração de Ambiente/Servidor]
- Detalhes: Deve ser configurado no servidor web (Apache/Nginx) ou via middleware (
TrustProxies
eURL::forceScheme('https')
noAppServiceProvider
se atrás de proxy/load balancer). O projeto base não força por padrão no código.
- Detalhes: Deve ser configurado no servidor web (Apache/Nginx) ou via middleware (
- RF05.4: Proteger informações sensíveis (senhas) com hashing seguro. [Implementado (Padrão Laravel)]
- Detalhes: O model
User
padrão do Laravel já usa o casthashed
para o atributopassword
.
- Detalhes: O model
- RF05.5: Implementar tratamento de erros seguro (sem exposição de detalhes em produção). [Implementado (Padrão Laravel)]
- Detalhes: Controlado pela variável
APP_DEBUG
no.env
.
- Detalhes: Controlado pela variável
- RF05.6: Fornecer um sistema de logging abrangente. [Implementado (Base)]
- Detalhes: Utiliza o Monolog via
config/logging.php
. Logging específico (auditoria) requer implementação adicional.
- Detalhes: Utiliza o Monolog via
- RF05.7: Incentivar o princípio de "nunca confiar nas entradas do usuário". [Diretriz]
- Detalhes: É uma prática de desenvolvimento a ser seguida, não uma feature implementada per se, embora as validações (RF05.1) ajudem.
RF06: Suporte a Testes
- RF06.1: Incluir estrutura básica para testes unitários. [Implementado (Estrutura + Exemplos)]
- Detalhes: Diretório
tests/Unit
comExampleTest.php
e testes para Notifications/Seeders. Usa PHPUnit.
- Detalhes: Diretório
- RF06.2: Incluir estrutura básica para testes de integração/feature. [Implementado (Estrutura + Exemplos)]
- Detalhes: Diretório
tests/Feature
com testes para Auth, Profile, Admin, etc. Usa PHPUnit eRefreshDatabase
.
- Detalhes: Diretório
- RF06.3: Incluir estrutura básica para testes de navegador (Dusk). [Implementado (Estrutura + Exemplos)]
- Detalhes: Diretório
tests/Browser
com testes para fluxos principais.DuskTestCase
customizado.
- Detalhes: Diretório
- RF06.4: Documentar configuração e execução dos testes. [Implementado (Base)]
- Detalhes:
README.md
eTestes.md
(gerado por você) explicam como rodar (php artisan test
,php artisan dusk
) e o ambiente.env.testing
.
- Detalhes:
Requisitos Não Funcionais (RNF)
Descrevem as qualidades e restrições do sistema.
RNF01: Desempenho
- RNF01.1: Aplicação base leve e com impacto mínimo. [Objetivo Arquitetural]
- Detalhes: Laravel 11 é relativamente leve. A escolha de pacotes adicionais foi criteriosa. O desempenho final dependerá da aplicação construída sobre a base.
- RNF01.2: Autenticação/Autorização eficientes. [Alcançado Parcialmente]
- Detalhes: Fluxos padrão são eficientes. Cache de permissões do Spatie ajuda. A performance pode depender da latência da rede com Senha Única/Replicado. Otimizações de cache são configuráveis.
RNF02: Segurança
- RNF02.1: Desenvolvimento seguindo melhores práticas de segurança. [Prática Contínua / Objetivo]
- Detalhes: O projeto base implementa padrões Laravel (CSRF, hashing, escaping). Aderência a outras práticas (validação, autorização) é incentivada.
- RNF02.2: Facilitar implementação de medidas de segurança adicionais. [Suportado (Estrutura)]
- Detalhes: Estrutura Laravel e Spatie facilitam adicionar Gates, Policies, Middlewares de segurança.
- RNF02.3: Incentivar Privacy by Design. [Diretriz]
- Detalhes: O projeto base não implementa funcionalidades específicas de privacidade, mas sua estrutura permite incorporar esses princípios.
RNF03: Usabilidade
- RNF03.1: Estrutura clara e organizada para desenvolvedores. [Suportado (Estrutura Laravel)]
- Detalhes: Segue a estrutura padrão do Laravel 11.
- RNF03.2: Interface administrativa intuitiva. [Implementado (Base)]
- Detalhes: A interface admin fornecida é básica. Sugestão: Melhorar a UX/UI da área admin pode ser um objetivo futuro.
RNF04: Confiabilidade
- RNF04.1: Código robusto e bem testado. [Alcançado Parcialmente]
- Detalhes: O projeto base inclui testes para funcionalidades chave. A cobertura e robustez DEVEM ser mantidas e expandidas.
- RNF04.2: Tratamento adequado de exceções. [Implementado (Padrão Laravel)]
- Detalhes: Utiliza o Handler de Exceções do Laravel (
app/Exceptions/Handler.php
).
- Detalhes: Utiliza o Handler de Exceções do Laravel (
RNF05: Escalabilidade
- RNF05.1: Arquitetura flexível sem limitações inerentes. [Objetivo Arquitetural]
- Detalhes: A arquitetura Laravel é geralmente escalável. A escalabilidade dependerá das escolhas de implementação da aplicação derivada.
- RNF05.2: Suporte a serviços externos escaláveis (cache, filas). [Implementado (Via Configuração)]
- Detalhes: Suporta Redis, Memcached, SQS, etc., via configuração.
RNF06: Manutenabilidade
- RNF06.1: Código bem documentado e seguindo padrões (PSR-12). [Suportado (Ferramentas) / Prática Contínua]
- Detalhes: PSR-12 é o padrão. Laravel Pint está configurado. A documentação (como esta) é um esforço contínuo.
- RNF06.2: Arquitetura modular (SRP, DRY). [Suportado (Estrutura Laravel) / Diretriz]
- Detalhes: A estrutura do Laravel (MVC, Service Providers) incentiva a modularidade. Os princípios DEVEM ser aplicados durante o desenvolvimento. Boas práticas documentadas.
- RNF06.3: Facilitar atualização/adição de funcionalidades ao projeto base. [Objetivo Arquitetural]
- Detalhes: Depende da manutenção de baixo acoplamento e código limpo.
- RNF06.4: Utilizar padrões de projeto comuns Laravel. [Suportado (Estrutura Laravel)]
- Detalhes: O projeto utiliza MVC, Facades, Service Providers, Eloquent, etc.
RNF07: Portabilidade
- RNF07.1: Compatível com diferentes ambientes USP. [Objetivo / Configuração]
- Detalhes: Usa tecnologias padrão (PHP, MySQL/Postgres/SQLite). A compatibilidade depende da configuração correta do ambiente de destino.
- RNF07.2: Minimizar dependências de infraestrutura específicas. [Objetivo Arquitetural]
- Detalhes: Usa abstrações do Laravel (Filesystem, Cache, Queue) que permitem trocar drivers facilmente.
RNF08: Testabilidade
- RNF08.1: Arquitetura projetada para facilitar testes automatizados. [Suportado (Estrutura Laravel)]
- Detalhes: O uso de IoC Container, Facades (com Mocks), Eloquent (com DB in-memory) facilita os testes.
- RNF08.2: Fornecer exemplos de testes unitários e de integração/feature/browser. [Implementado (Estrutura + Exemplos)]
- Detalhes: Diretório
tests/
contém exemplos.
- Detalhes: Diretório
RNF09: Conformidade
- RNF09.1: Conformidade com políticas de segurança e privacidade USP. [Processo Externo / Diretriz]
- Detalhes: O projeto base fornece ferramentas de segurança, mas a conformidade final depende da implementação específica e das políticas vigentes da USP.
- RNF09.2: Utilizar componentes de terceiros confiáveis e licenciados. [Prática Contínua]
- Detalhes: As dependências são gerenciadas via Composer/NPM. As licenças (principalmente MIT, algumas GPL) DEVEM ser verificadas periodicamente.
Esta documentação de requisitos estabelece uma base sólida, mas DEVE ser considerada um documento vivo, a ser revisado e atualizado conforme o Projeto Base USP evolui.