Optimierung 3.6: Zugriffs-Gates und getrennte Impersonation-Sperre
- Gate::define('access-admin'|'access-customer') als Single Source of Truth im
AppServiceProvider (auch via @can/Policies nutzbar). EnsureUserIsAdmin und
EnsureUserIsCustomer pruefen jetzt ueber diese Gates.
- Impersonation-Redirect aus EnsureUserIsAdmin in die eigene Middleware
BlockAdminDuringImpersonation ausgelagert (Sitzungs-Bedingung statt
Rollenfrage); laeuft vor der Zugriffspruefung und ist zusaetzlich als
persistente Livewire-Middleware registriert.
- Routen-Alias 'can:' bewusst NICHT verwendet: die Admin-Middleware ist
persistente Livewire-Middleware und braucht eine konkrete Klasse; der
parametrisierte Alias kann dort nicht stehen. EnsureApiUserIsActive bleibt
eigenstaendig (is_active-Pruefung mit getesteter JSON-Antwort, kein Gate).
- Tests: Auth/AccessGatesTest; UserImpersonationTest bleibt gruen.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b255d90721
commit
31e01e46b6
7 changed files with 104 additions and 16 deletions
|
|
@ -3,6 +3,7 @@
|
|||
use App\Http\Controllers\Admin\DashboardController;
|
||||
use App\Http\Controllers\Admin\LeaveImpersonationController;
|
||||
use App\Http\Controllers\LegacyInvoicePdfController;
|
||||
use App\Http\Middleware\BlockAdminDuringImpersonation;
|
||||
use App\Http\Middleware\EnsureUserIsAdmin;
|
||||
use App\Http\Middleware\LogSlowAdminRequests;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
|
@ -13,7 +14,7 @@ use Livewire\Volt\Volt;
|
|||
// Eingeloggte Admins werden über die Auth-Pipeline direkt nach /dashboard
|
||||
// geleitet (siehe FORTIFY_HOME / LoginResponseContract).
|
||||
Route::get('dashboard', DashboardController::class)
|
||||
->middleware(['auth', 'verified', EnsureUserIsAdmin::class, LogSlowAdminRequests::class])
|
||||
->middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, EnsureUserIsAdmin::class, LogSlowAdminRequests::class])
|
||||
->name('dashboard');
|
||||
|
||||
// ========================================
|
||||
|
|
@ -33,7 +34,7 @@ Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
|
|||
// ========================================
|
||||
// Admin-Bereich (nur Rollen admin/editor)
|
||||
// ========================================
|
||||
Route::middleware(['auth', 'verified', EnsureUserIsAdmin::class, LogSlowAdminRequests::class])->group(function () {
|
||||
Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, EnsureUserIsAdmin::class, LogSlowAdminRequests::class])->group(function () {
|
||||
|
||||
// Content Management
|
||||
Volt::route('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue