70 lines
2.3 KiB
PHP
70 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class ResourceAccess
|
|
{
|
|
public function handle(Request $request, Closure $next, string $resourceType, string $resourceValue): Response
|
|
{
|
|
try {
|
|
// Add debug logging
|
|
Log::info('Resource Access Check', [
|
|
'user_id' => auth()->id(),
|
|
'resource_type' => $resourceType,
|
|
'resource_value' => $resourceValue,
|
|
'url' => $request->url()
|
|
]);
|
|
|
|
$hasAccess = DB::table('auth.vw_user_authorizations')
|
|
->where('user_id', auth()->id())
|
|
->where('resource_type', $resourceType)
|
|
->where('resource_value', $resourceValue)
|
|
->exists();
|
|
|
|
// Add query logging
|
|
Log::info('Access Query Result', [
|
|
'hasAccess' => $hasAccess,
|
|
'query' => DB::table('auth.vw_user_authorizations')
|
|
->where('user_id', auth()->id())
|
|
->where('resource_type', $resourceType)
|
|
->where('resource_value', $resourceValue)
|
|
->toSql(),
|
|
'bindings' => [
|
|
'user_id' => auth()->id(),
|
|
'resource_type' => $resourceType,
|
|
'resource_value' => $resourceValue
|
|
]
|
|
]);
|
|
|
|
if (!$hasAccess) {
|
|
Log::warning('Unauthorized resource access attempt', [
|
|
'user_id' => auth()->id(),
|
|
'resource_type' => $resourceType,
|
|
'resource_value' => $resourceValue,
|
|
'url' => $request->url()
|
|
]);
|
|
|
|
abort(403, 'Unauthorized to access this resource');
|
|
}
|
|
|
|
return $next($request);
|
|
|
|
} catch (\Exception $e) {
|
|
Log::error('Error in resource access middleware', [
|
|
'message' => $e->getMessage(),
|
|
'user_id' => auth()->id(),
|
|
'resource_type' => $resourceType,
|
|
'resource_value' => $resourceValue
|
|
]);
|
|
|
|
abort(403, 'Unable to verify resource access');
|
|
}
|
|
}
|
|
}
|