security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8)
- users:manage/roles:manage auf allen User-/Rollen-Masken erzwungen; is_super_admin aus $fillable entfernt und nur per autorisiertem forceFill setzbar; zentraler Gate::before-Super-Admin-Kurzschluss (K1/M8). - Nicht-Super-Admins können Super-Admin-Konten nicht mehr bearbeiten (Fix#2); Impersonation mit Rangprüfung, keine Token-Erstellung während Impersonation (H1). - Destruktive/verwaltende Admin-Aktionen (CRM/Billing/Compliance/Struktur) hängen an neuen admin-only Permissions; Editor behält reine Content-Rechte (H2). - Kanonischer Permission-Katalog (App\Authorization\Permission) als Single Source of Truth für Seeder und Monitoring. Deployment: `php artisan db:seed --class=RolesAndPermissionsSeeder` auf allen Umgebungen ausführen (neue Permissions). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
299837d2ba
commit
40783192d0
34 changed files with 748 additions and 100 deletions
|
|
@ -30,6 +30,7 @@ use Illuminate\Auth\Events\Verified;
|
|||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Auth\Notifications\ResetPassword;
|
||||
use Illuminate\Auth\Notifications\VerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Events\QueryExecuted;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Queue\Events\JobFailed;
|
||||
|
|
@ -74,6 +75,8 @@ class AppServiceProvider extends ServiceProvider
|
|||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
Model::preventLazyLoading(app()->isLocal());
|
||||
|
||||
$scheme = request()->header('X-Forwarded-Proto')
|
||||
?? request()->server('HTTP_X_FORWARDED_PROTO')
|
||||
?? (request()->secure() ? 'https' : 'http');
|
||||
|
|
@ -91,6 +94,12 @@ class AppServiceProvider extends ServiceProvider
|
|||
|
||||
// Zugriffs-Gates als Single Source of Truth (auch in Blade via @can und in
|
||||
// Policies nutzbar). Dieselbe Definition, die die Panel-Middleware prüfen.
|
||||
// Super-Admins dürfen alles: zentraler Kurzschluss vor allen Gates und
|
||||
// Permission-Checks (analog zu den Policy-`before()`-Methoden). Damit
|
||||
// greifen feingranulare `can('users:manage')`-Prüfungen auch für
|
||||
// Super-Admins, die keine Spatie-Rolle mit der Permission tragen.
|
||||
Gate::before(fn (User $user, string $ability): ?bool => $user->is_super_admin ? true : null);
|
||||
|
||||
Gate::define('access-admin', fn (User $user): bool => $user->canAccessAdmin());
|
||||
Gate::define('access-customer', fn (User $user): bool => $user->canAccessCustomer());
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue