İlk temizlik tamamlandı bir önceki projeden
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user