Criar middleware check permission#884#41
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughEste conjunto de mudanças introduz novos controladores, middlewares, modelos, migrações e seeders para aprimorar a funcionalidade da API. Foram adicionados endpoints dedicados ao painel administrativo e à gestão de relatórios, além de aprimoramentos nas regras de autorização e controle de acesso via papéis e permissões. As alterações também incluem a criação e ajuste de tabelas no banco de dados, visando melhorar a estrutura e a semântica dos dados. Changes
Sequence Diagram(s)sequenceDiagram
participant Cliente as Cliente
participant API as Rota API
participant MR as Middleware (CheckRole)
participant ADC as AdminDashboardController
Cliente->>API: GET /admin/dashboard
API->>MR: Verifica papel "admin"
MR-->>API: Retorna permissão ou 403
API->>ADC: Chama método index
ADC-->>API: JSON "Bem-vindo ao painel administrativo!"
API-->>Cliente: Resposta JSON
sequenceDiagram
participant Cliente as Cliente
participant API as Rota API
participant MP as Middleware (CheckPermission)
participant RC as ReportController
Cliente->>API: GET /report/
API->>MP: Verifica permissão para visualização de relatórios
MP-->>API: Retorna permissão ou 403
API->>RC: Chama método index
RC-->>API: JSON com mensagem sobre relatórios
API-->>Cliente: Resposta JSON
Poem
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 18
🔭 Outside diff range comments (1)
database/migrations/2025_03_16_161750_create_role_permission_table.php (1)
1-33:⚠️ Potential issueData futura no nome da migração pode causar problemas
O arquivo de migração está datado de 2025, o que está no futuro e pode causar problemas na sequência de execução das migrações.
Renomeie o arquivo de migração para usar a data atual. No Laravel, você pode usar o comando
php artisan make:migration create_role_permission_tableque irá criar automaticamente um arquivo com a data correta.
🧹 Nitpick comments (6)
app/Http/Middleware/CheckPermission.php (1)
14-14: Considere adicionar tipagem para o parâmetro $requiredPermission.Para melhorar a clareza do código e aproveitar os recursos do PHP moderno, seria útil adicionar tipagem para o parâmetro
$requiredPermission.- public function handle(Request $request, Closure $next, $requiredPermission) + public function handle(Request $request, Closure $next, string $requiredPermission)database/seeders/PermissionsSeeder.php (1)
10-10: Adicionar tipo de retorno ao método run.Para melhorar a clareza do código e seguir as boas práticas do PHP moderno, considere adicionar o tipo de retorno
voidao métodorun.- public function run() + public function run(): voidapp/Models/Permission.php (1)
18-20: Melhorar formatação do método belongsToMany.A formatação atual do método
belongsToManypode ser melhorada para maior legibilidade.- return $this->belongsToMany(Role::class, "role_permissions", "permission_id", - "role_id"); + return $this->belongsToMany( + Role::class, + "role_permissions", + "permission_id", + "role_id" + );app/Http/Controllers/ReportController.php (1)
5-7: Importação não utilizadaA classe
Requestestá sendo importada mas não é utilizada no controlador.use App\Http\Controllers\Controller; -use Illuminate\Http\Request;app/Http/Controllers/AdminDashboardController.php (1)
5-7: Importação não utilizadaA classe
Requestestá sendo importada mas não é utilizada no controlador.use App\Http\Controllers\Controller; -use Illuminate\Http\Request;app/Http/Middleware/CheckRole.php (1)
11-18: Corrigir formatação do PHPDoc.A formatação do PHPDoc contém asteriscos extras que devem ser removidos para manter a consistência com o estilo do Laravel.
/** - ** Handle an incoming request. - * * - * * @param \Illuminate\Http\Request $request - * * @param \Closure $next - * * @param string $role - * * @return mixed + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string $role + * @return mixed */
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (16)
app/Http/Controllers/AdminDashboardController.php(1 hunks)app/Http/Controllers/ReportController.php(1 hunks)app/Http/Kernel.php(1 hunks)app/Http/Middleware/CheckPermission.php(1 hunks)app/Http/Middleware/CheckRole.php(1 hunks)app/Models/Permission.php(1 hunks)app/Models/Role.php(1 hunks)app/Models/User.php(1 hunks)database/migrations/2024_01_25_210912_create_users_table.php(1 hunks)database/migrations/2024_11_29_185241_add_new_fields.php(0 hunks)database/migrations/2025_03_16_150203_create_permission_table.php(1 hunks)database/migrations/2025_03_16_161750_create_role_permission_table.php(1 hunks)database/migrations/2025_04_02_184003_create_permissions_table.php(1 hunks)database/seeders/DatabaseSeeder.php(2 hunks)database/seeders/PermissionsSeeder.php(1 hunks)routes/api.php(4 hunks)
💤 Files with no reviewable changes (1)
- database/migrations/2024_11_29_185241_add_new_fields.php
🧰 Additional context used
🧬 Code Graph Analysis (7)
database/seeders/PermissionsSeeder.php (1)
database/seeders/DatabaseSeeder.php (1)
run(15-29)
app/Models/Permission.php (1)
app/Models/Role.php (1)
Role(10-28)
app/Http/Controllers/AdminDashboardController.php (2)
app/Http/Controllers/Controller.php (1)
Controller(5-8)app/Http/Controllers/ReportController.php (1)
index(10-13)
database/seeders/DatabaseSeeder.php (2)
database/seeders/PermissionsSeeder.php (1)
PermissionsSeeder(8-18)app/Models/User.php (1)
User(12-69)
app/Http/Middleware/CheckPermission.php (2)
app/Http/Middleware/CheckRole.php (1)
handle(19-28)app/Models/User.php (1)
hasPermission(64-67)
app/Http/Kernel.php (2)
app/Http/Middleware/CheckRole.php (1)
CheckRole(9-29)app/Http/Middleware/CheckPermission.php (1)
CheckPermission(9-24)
app/Http/Middleware/CheckRole.php (3)
app/Http/Middleware/CheckPermission.php (1)
handle(14-23)app/Models/User.php (1)
role(59-62)app/Models/Permission.php (1)
roles(16-20)
🔇 Additional comments (18)
app/Http/Middleware/CheckPermission.php (1)
1-24: Middleware implementado corretamente para verificação de permissões.O middleware
CheckPermissionestá bem estruturado e segue as convenções do Laravel. A lógica para verificar se um usuário possui uma permissão específica é delegada ao modelo User através do métodohasPermission, o que mantém uma boa separação de responsabilidades.database/migrations/2025_04_02_184003_create_permissions_table.php (2)
1-22: Migração para tabela de permissões implementada corretamente.A estrutura da tabela
permissionsestá bem definida com um ID auto-incrementável, uma colunanameúnica e timestamps. O métododown()também está corretamente implementado para garantir rollbacks limpos.
1-1: Verifique a data no nome do arquivo de migração.O arquivo está datado como 2025_04_02, o que parece ser uma data futura. Normalmente, os arquivos de migração são nomeados com a data atual da criação.
Verifique se esta data futura é intencional ou se deve ser ajustada para refletir a data atual.
app/Models/Permission.php (1)
1-21: Modelo Permission implementado corretamente.O modelo está bem estruturado com a propriedade
$fillablee o relacionamento many-to-many com o modelo Role.app/Models/User.php (1)
31-31: Revise a presença de 'permission' em $fillable.Considerando que agora você está implementando um sistema baseado em roles e permissions usando relacionamentos, o campo
permissionno array$fillablepode ser obsoleto ou inconsistente com o novo design.database/seeders/DatabaseSeeder.php (2)
8-8: Importação correta.A importação da classe PermissionsSeeder está correta.
28-28: Seed de permissões está correto.A chamada ao PermissionsSeeder está implementada corretamente.
database/migrations/2025_03_16_150203_create_permission_table.php (2)
14-14: Tabela nomeada corretamente.O uso do nome plural 'permissions' para a tabela está de acordo com as convenções do Laravel.
38-38: Drop da tabela está consistente.O método
down()está corretamente utilizando o mesmo nome de tabela ('permissions') que foi criado no métodoup().app/Models/Role.php (2)
14-16: Boa adição do atributo fillable.A adição de
protected $fillable = ['name']permite a atribuição em massa para o atributo 'name', o que é uma prática comum em Laravel para controlar quais campos podem ser preenchidos usando métodos comocreate()ouupdate().
25-26: Aprimoramento na definição do relacionamento many-to-many.A especificação explícita do nome da tabela pivot (
role_permission) e dos nomes de chaves estrangeiras (role_idepermission_id) no métodobelongsToManymelhora a clareza e evita possíveis conflitos de naming conventions.app/Http/Kernel.php (1)
31-34: Registro adequado dos middlewares de role e permissão.Os middlewares
roleecheckPermissionestão corretamente registrados no array$routeMiddleware, permitindo que sejam facilmente aplicados às rotas.routes/api.php (6)
28-29: Importação correta dos novos controladores.As importações dos novos controladores
AdminDashboardControllereReportControllerestão corretas e seguem as convenções de namespace do Laravel.
56-59: Rota administrativa com middleware de verificação de função.A nova rota
/adminestá protegida pelo middleware 'role:admin', o que é adequado para garantir que apenas usuários com a função de administrador possam acessar este endpoint.
67-71: Implementação correta de verificação de permissão específica.A rota de relatórios está corretamente protegida pelo middleware 'checkPermission:view_reports', usando uma permissão específica que descreve claramente a ação permitida.
73-85: Não há alterações significativas na estrutura das rotas de usuário.As rotas de usuário foram apenas reindentadas e movidas para depois das novas rotas administrativas e de relatórios, sem alterações na funcionalidade.
109-109: Correção de sintaxe na definição da rota.Pequena alteração na sintaxe da definição da rota '/squad/{uuid}', sem mudanças na funcionalidade.
61-65:Details
❓ Verification inconclusive
Verifique a coerência entre middleware e controller.
A rota
/admin/dashboardestá protegida pelo middleware 'checkPermission:admin', mas seria mais coerente usar 'role:admin' ou definir uma permissão específica como 'view_dashboard'.Verifique se existe uma permissão chamada 'admin' ou se a intenção era verificar o papel do usuário. Se for verificar permissão, recomendamos criar uma permissão específica como 'view_dashboard'.
🏁 Script executed:
#!/bin/bash # Verificar se existe uma permissão chamada 'admin' no código echo "Procurando por permissões com nome 'admin':" rg -i "permission.*admin" --type php echo "Procurando seeders de permissão que possam definir 'admin':" rg -i "admin.*permission" --type phpLength of output: 582
Atenção: Verificação da coerência entre middleware e verificação de permissão
A análise evidencia que a string
"admin"está sendo utilizada para a verificação de permissão em outros trechos do código (como nos controllersPermissionUserController.phpeActiveProductController.php). Assim, se a intenção foi realizar uma checagem de permissão para restringir o acesso à rota/admin/dashboard, a utilização do middlewarecheckPermission:adminestá consistente.No entanto, caso o objetivo seja validar o papel (role) do usuário, seria mais adequado:
- Ajustar o middleware para
role:admin- OU definir uma permissão mais específica para o dashboard, como
view_dashboard, se a verificação for de permissãoRecomendo uma verificação manual para confirmar se a estratégia adotada (teste de permissão versus teste de papel) está alinhada com a arquitetura de segurança definida para o projeto.
| DB::table('permission')->insert([ | ||
| ['name' => 'Criar'], | ||
| ['name' => 'Editar'], | ||
| ['name' => 'Deletar'], | ||
| ]); |
There was a problem hiding this comment.
Corrigir nome da tabela no seeder.
Há uma inconsistência no nome da tabela. A migração cria uma tabela chamada permissions (plural), mas o seeder está tentando inserir registros em uma tabela chamada permission (singular).
- DB::table('permission')->insert([
+ DB::table('permissions')->insert([📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| DB::table('permission')->insert([ | |
| ['name' => 'Criar'], | |
| ['name' => 'Editar'], | |
| ['name' => 'Deletar'], | |
| ]); | |
| DB::table('permissions')->insert([ | |
| ['name' => 'Criar'], | |
| ['name' => 'Editar'], | |
| ['name' => 'Deletar'], | |
| ]); |
| return $this->belongsToMany(Role::class, "role_permissions", "permission_id", | ||
| "role_id"); |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Verificar inconsistência no nome da tabela pivot.
Há uma possível inconsistência no nome da tabela pivot. Aqui você está usando "role_permissions" (plural), mas no modelo Role (conforme o snippet fornecido) está sendo usado "role_permission" (singular).
- return $this->belongsToMany(Role::class, "role_permissions", "permission_id",
+ return $this->belongsToMany(Role::class, "role_permission", "permission_id",Alternativamente, você pode atualizar o relacionamento no modelo Role para usar o mesmo nome de tabela.
Verifique qual nome de tabela é o correto e garanta que ambos os modelos estejam usando o mesmo nome para a tabela pivot.
Ajuste Necessário: Consistência no Nome da Tabela Pivot
Conforme apontado, há uma inconsistência entre os nomes da tabela pivot utilizados nos modelos. No modelo Permission está sendo usado "role_permissions" (plural), enquanto que o modelo Role está referenciando "role_permission" (singular). É necessário alinhar ambos para que utilizem o mesmo nome.
- Arquivo:
app/Models/Permission.php(linhas 18-19) - Ação Sugerida: Altere o relacionamento para utilizar o nome consistente, por exemplo:
- return $this->belongsToMany(Role::class, "role_permissions", "permission_id", "role_id"); + return $this->belongsToMany(Role::class, "role_permission", "permission_id", "role_id");
🏁 Script executed:
#!/bin/bash
echo "Verificando a consistência dos nomes das tabelas pivot nos modelos Permission e Role..."
# Verificar a declaração no model Permission (app/Models/Permission.php)
echo "Pesquisando em app/Models/Permission.php:"
rg -n 'belongsToMany.*role_permissions' app/Models/Permission.php
# Verificar a declaração no model Role (app/Models/Role.php)
echo "Pesquisando em app/Models/Role.php:"
rg -n 'belongsToMany' app/Models/Role.php | grep -E 'role_permission|role_permissions'Length of output: 812
Alinhar nomenclatura da tabela pivot
Observamos que no modelo Permission (linhas 18-19) o relacionamento utiliza "role_permissions" (plural), enquanto no modelo Role (linha 25) é usado "role_permission" (singular). É necessário alinhar ambos para garantir a consistência do relacionamento.
- Arquivo:
app/Models/Permission.php(linhas 18-19) - Arquivo:
app/Models/Role.php(linha 25) - Sugestão: Atualizar um dos modelos para que ambos utilizem o mesmo nome. Por exemplo, se o nome correto for o singular, altere o modelo
Permissionconforme o diff abaixo:
- return $this->belongsToMany(Role::class, "role_permissions", "permission_id", "role_id");
+ return $this->belongsToMany(Role::class, "role_permission", "permission_id", "role_id");Certifique-se de que a definição da tabela pivot esteja correta e consistente em ambos os modelos.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| return $this->belongsToMany(Role::class, "role_permissions", "permission_id", | |
| "role_id"); | |
| return $this->belongsToMany(Role::class, "role_permission", "permission_id", "role_id"); |
| $table->uuid('uuid')->unique(); | ||
| $table->string('name', 60); | ||
| $table->string('email', 60)->unique(); | ||
| $table->string('email_verified_at', 60)->unique(); |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Atenção ao tipo de coluna email_verified_at
A coluna email_verified_at está definida como string com restrição única, mas em projetos Laravel convencionalmente esta coluna é do tipo timestamp e pode ser nula. A definição atual pode causar problemas:
- A restrição
unique()impedirá que múltiplos usuários verifiquem seus emails no mesmo momento - Sem a restrição
nullable(), todos os usuários precisarão ter esta coluna preenchida desde a criação
Recomendo alterar a definição para seguir o padrão Laravel:
-$table->string('email_verified_at', 60)->unique();
+$table->timestamp('email_verified_at')->nullable();📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| $table->string('email_verified_at', 60)->unique(); | |
| $table->timestamp('email_verified_at')->nullable(); |
| @@ -0,0 +1,14 @@ | |||
| <?php | |||
|
|
|||
| namespace App\Http\Controllers\Report; | |||
There was a problem hiding this comment.
🛠️ Refactor suggestion
Inconsistência entre namespace e localização do arquivo
O namespace App\Http\Controllers\Report indica que este arquivo deveria estar em um subdiretório Report, mas o caminho do arquivo é app/Http/Controllers/ReportController.php.
Recomendo uma das seguintes opções:
- Mover o arquivo para
app/Http/Controllers/Report/ReportController.php - Ou alterar o namespace para
App\Http\Controllers
| public function index() | ||
| { | ||
| return response()->json(['message' => 'Relatórios disponíveis.']); | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Implementação mínima do controlador de relatórios
O método index apenas retorna uma mensagem estática sem funcionalidade real de relatórios.
Recomendo expandir a implementação para fornecer dados reais de relatórios e adicionar verificação de permissões conforme mencionado nos objetivos do PR. Considere:
- Adicionar verificação de permissões usando o middleware mencionado no PR
- Implementar métodos para recuperar dados reais de relatórios
- Estruturar a resposta de acordo com padrões de API (como JSON:API)
Exemplo de implementação melhorada:
public function index()
{
// Aqui viria a lógica para buscar relatórios do banco de dados
$reports = []; // Substitua por dados reais
return response()->json([
'status' => 'success',
'data' => $reports,
'message' => 'Relatórios disponíveis.'
]);
}| $user = Auth::user(); | ||
|
|
||
| if ($user && $user->roles->contains('name', $role)) { | ||
| return $next($request); | ||
| } |
There was a problem hiding this comment.
Inconsistência no relacionamento de roles.
No modelo User, a relação definida é role() (singular), indicando que um usuário pertence a um único role. No entanto, aqui está sendo usado roles (plural) com o método contains, sugerindo uma relação muitos-para-muitos.
$user = Auth::user();
- if ($user && $user->roles->contains('name', $role)) {
+ if ($user && $user->role && $user->role->name === $role) {
return $next($request);
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| $user = Auth::user(); | |
| if ($user && $user->roles->contains('name', $role)) { | |
| return $next($request); | |
| } | |
| $user = Auth::user(); | |
| if ($user && $user->role && $user->role->name === $role) { | |
| return $next($request); | |
| } |
| return $next($request); | ||
| } | ||
|
|
||
| abort(403, 'Acesso negado'); |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Considere usar response JSON em vez de abort.
Como esta é uma API, seria mais apropriado retornar uma resposta JSON com código de status 403 em vez de usar a função abort(), para manter a consistência com o restante da API.
- abort(403, 'Acesso negado');
+ return response()->json(['message' => 'Acesso negado'], 403);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| abort(403, 'Acesso negado'); | |
| return response()->json(['message' => 'Acesso negado'], 403); |
| // Inserir permissões iniciais | ||
| $permissions = [ | ||
| ['name' => 'cadastrar_produto'], | ||
| ['name' => 'consultar_produto'], | ||
| ['name' => 'editar_produto'], | ||
| ['name' => 'deletar_produto'] | ||
| ]; | ||
|
|
||
| foreach ($permissions as $permission) { | ||
| DB::table('permissions')->insert($permission); | ||
| } |
There was a problem hiding this comment.
Falta importação da facade DB e inconsistência nos nomes das permissões.
Há duas questões neste trecho:
- A facade
DBé utilizada, mas não foi importada - Os nomes das permissões diferem das mencionadas no PermissionsSeeder ('Criar', 'Editar', 'Deletar')
+ use Illuminate\Support\Facades\DB;
// Inserir permissões iniciais
$permissions = [
- ['name' => 'cadastrar_produto'],
- ['name' => 'consultar_produto'],
- ['name' => 'editar_produto'],
- ['name' => 'deletar_produto']
+ ['name' => 'Criar'],
+ ['name' => 'Editar'],
+ ['name' => 'Deletar']
];
foreach ($permissions as $permission) {
DB::table('permissions')->insert($permission);
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Inserir permissões iniciais | |
| $permissions = [ | |
| ['name' => 'cadastrar_produto'], | |
| ['name' => 'consultar_produto'], | |
| ['name' => 'editar_produto'], | |
| ['name' => 'deletar_produto'] | |
| ]; | |
| foreach ($permissions as $permission) { | |
| DB::table('permissions')->insert($permission); | |
| } | |
| + use Illuminate\Support\Facades\DB; | |
| // Inserir permissões iniciais | |
| $permissions = [ | |
| ['name' => 'Criar'], | |
| ['name' => 'Editar'], | |
| ['name' => 'Deletar'] | |
| ]; | |
| foreach ($permissions as $permission) { | |
| DB::table('permissions')->insert($permission); | |
| } |
| protected $middleware = [ | ||
| \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, | ||
| \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, | ||
| \App\Http\Middleware\CheckRole::class, | ||
| \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, | ||
| ]; |
There was a problem hiding this comment.
CheckRole configurado como middleware global - revise esta configuração.
O middleware CheckRole está configurado como global, o que significa que será executado em todas as requisições HTTP, incluindo rotas públicas. Isso pode causar problemas de autenticação em rotas que deveriam ser acessíveis sem login.
Considere remover o CheckRole do array de middleware global e aplicá-lo apenas nas rotas que realmente necessitam de verificação de função:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
- \App\Http\Middleware\CheckRole::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| protected $middleware = [ | |
| \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, | |
| \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, | |
| \App\Http\Middleware\CheckRole::class, | |
| \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, | |
| ]; | |
| protected $middleware = [ | |
| \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, | |
| \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, | |
| \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, | |
| ]; |
| protected $middlewareGroups = [ | ||
| 'web' => [ | ||
| \App\Http\Middleware\CheckRole::class, | ||
| \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, | ||
| \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, | ||
| \Illuminate\Session\Middleware\StartSession::class, | ||
| \Illuminate\View\Middleware\ShareErrorsFromSession::class, | ||
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||
| ], | ||
| 'api' => [ | ||
| 'throttle:60,1', | ||
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||
| ], | ||
| ]; |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Redundância na configuração de middleware do grupo 'web'.
O middleware CheckRole está configurado tanto globalmente quanto no grupo 'web', o que é redundante. Além disso, os middlewares ValidatePostSize e ConvertEmptyStringsToNull também estão duplicados.
Remova as duplicações e considere adicionar outros middlewares importantes que estão faltando no grupo 'web':
protected $middlewareGroups = [
'web' => [
- \App\Http\Middleware\CheckRole::class,
- \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
- \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
+ \Illuminate\Cookie\Middleware\EncryptCookies::class,
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+ \App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| protected $middlewareGroups = [ | |
| 'web' => [ | |
| \App\Http\Middleware\CheckRole::class, | |
| \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, | |
| \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, | |
| \Illuminate\Session\Middleware\StartSession::class, | |
| \Illuminate\View\Middleware\ShareErrorsFromSession::class, | |
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | |
| ], | |
| 'api' => [ | |
| 'throttle:60,1', | |
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | |
| ], | |
| ]; | |
| protected $middlewareGroups = [ | |
| 'web' => [ | |
| \Illuminate\Session\Middleware\StartSession::class, | |
| \Illuminate\View\Middleware\ShareErrorsFromSession::class, | |
| \Illuminate\Cookie\Middleware\EncryptCookies::class, | |
| \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, | |
| \App\Http\Middleware\VerifyCsrfToken::class, | |
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | |
| ], | |
| 'api' => [ | |
| 'throttle:60,1', | |
| \Illuminate\Routing\Middleware\SubstituteBindings::class, | |
| ], | |
| ]; |
Foi criado o middleware CheckPermission, registrado no Kernel, aplicado nas rotas e criado duas controllers AdminDashboardController e ReportController para as permissões administrativas.
Summary by CodeRabbit
Novos Recursos
Melhorias de Segurança
Atualizações de Infraestrutura