Files
dockerfluxodecaixapro/modules/pagebuilder/classes/Middleware/AdminMiddleware.php
T
2026-09-01 10:46:29 -03:00

97 lines
2.6 KiB
PHP
Executable File

<?php
namespace Modules\PageBuilder\Middleware;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Modules\Auth\Models\User;
use Closure;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param Closure $next
* @return Response
*/
public function handle(Request $request, Closure $next): Response
{
// Check if the user is authenticated
if (!isset($_SESSION['user_id'])) {
if ($this->expectsJson($request)) {
return new JsonResponse([
'error' => 'Não autorizado',
'message' => 'Você precisa estar autenticado para acessar esta página.'
], 401);
}
return new Response('', 302, [
'Location' => url('/login')
]);
}
// Check if the user has admin permissions
$user = User::find($_SESSION['user_id']);
if (!$user || !$this->isAdmin($user)) {
if ($this->expectsJson($request)) {
return new JsonResponse([
'error' => 'Acesso negado',
'message' => 'Você não tem permissão para acessar esta página.'
], 403);
}
return new Response('', 302, [
'Location' => url('/')
]);
}
return $next($request);
}
/**
* Check if the request expects JSON.
*
* @param Request $request
* @return bool
*/
private function expectsJson(Request $request): bool
{
return $request->isXmlHttpRequest() || strpos($request->headers->get('Accept'), 'application/json') !== false;
}
/**
* Checks if the user has admin permissions.
*
* @param User $user
* @return bool
*/
private function isAdmin(User $user): bool
{
// Check if the user has the admin role
if (method_exists($user, 'hasRole') && $user->hasRole('admin')) {
return true;
}
// Check if the user has the admin.access permission
if (method_exists($user, 'hasPermission') && $user->hasPermission('admin.access')) {
return true;
}
// Check if the is_admin field exists and is true
if (isset($user->is_admin) && $user->is_admin) {
return true;
}
// Check if the level field exists and is greater than or equal to 5
if (isset($user->level) && $user->level >= 5) {
return true;
}
return false;
}
}