78 lines
2.5 KiB
PHP
78 lines
2.5 KiB
PHP
<?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);
|
||
}
|
||
}
|