Files
2026-04-28 21:14:25 +03:00

78 lines
2.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;
class AdvancedAuth
{
/**
* Handle an incoming request.
* Bu middleware route parametrelerinden "table" ve "action" bilgisini okur
* ve isAuth() helper'ını kullanarak yetki kontrolü yapar.
*/
public function handle(Request $request, Closure $next): Response
{
// Kullanıcı giriş yapmış mı?
if (!auth()->check() && !$request->user()) {
return response()->json(['message' => 'Unauthenticated.'], 401);
}
// Route parametrelerini al
// Route tanımı: /{table}/{action}
$table = $request->route('table') ?? $request->input('table');
$action = $request->route('action') ?? $request->input('action');
// table-column-values endpoint'i için action varsayılan olarak 'read' yap.
if (!$action && $request->is('api/table-column-values')) {
$action = 'read';
}
// CRUD action'larını permission type'larına eşle
$permissionType = 'read'; // Varsayılan
switch ($action) {
case 'create':
case 'store':
case 'insert':
$permissionType = 'write'; // veya 'create'
break;
case 'update':
case 'edit':
case 'save':
$permissionType = 'write'; // Genelde write güncelleme ve eklemeyi kapsar
break;
case 'delete':
case 'remove':
case 'destroy':
$permissionType = 'full'; // Silme genelde en yüksek yetki ister
break;
case 'read':
case 'get':
case 'list':
case 'view':
$permissionType = 'read';
break;
}
// Admin her zaman geçer (isAuth içinde kontrol ediliyor ama burada erken çıkış yapabiliriz)
// isAuth($moduleType, $permissionType)
// Not: $table parametresi genellikle slug veya tablo adıdır. isAuth slug bekler.
$moduleSlug = resolveModuleFromTable($table);
if (!isAuth($moduleSlug, $permissionType)) {
return response()->json([
'status' => 'error',
'message' => 'Unauthorized action.',
'required_permission' => "$moduleSlug:$permissionType"
], 403);
}
return $next($request);
}
}