id = $id; $role = Role::query() ->with('permissions:id,name,guard_name') ->findOrFail($id); $this->name = $role->name; $this->guardName = $role->guard_name; $this->permissions = $role->permissions ->pluck('name') ->values() ->all(); $this->isSystemRole = in_array($role->name, ['admin', 'editor', 'customer', 'api-only'], true); } public function save(): void { $validated = $this->validate([ 'name' => [ 'required', 'min:3', 'max:50', Rule::unique('roles', 'name') ->ignore($this->id) ->where(fn (Builder $query) => $query->where('guard_name', $this->guardName)), ], 'permissions' => ['array'], 'permissions.*' => [ 'string', Rule::exists('permissions', 'name') ->where(fn (Builder $query) => $query->where('guard_name', $this->guardName)), ], ]); $role = Role::query()->findOrFail($this->id); $role->name = $validated['name']; $role->save(); $role->syncPermissions($validated['permissions'] ?? []); session()->flash('success', 'Rolle und Berechtigungen erfolgreich aktualisiert.'); $this->redirect(route('admin.roles.index'), navigate: true); } public function with(): array { return [ 'permissionGroups' => $this->permissionGroups(), ]; } private function permissionGroups(): Collection { $cache = app(AdminPerformanceCache::class); return $cache->remember($cache->permissionGroupsKey($this->guardName), AdminPerformanceCache::OptionsTtl, fn () => Permission::query() ->where('guard_name', $this->guardName) ->orderBy('name') ->get(['name']) ->groupBy(function (Permission $permission): string { $prefix = Str::contains($permission->name, ':') ? Str::before($permission->name, ':') : $permission->name; return Str::headline(str_replace(['-', '_'], ' ', $prefix)); }) ->map(fn ($group) => $group->values()) ->sortKeys()); } }; ?>
{{-- ============== PAGE HEADER ============== --}} @if ($isSystemRole)
{{ __('Hinweis: Diese Rolle ist Teil des Basis-Setups. Aenderungen wirken sich direkt auf den Admin-Zugriff aus.') }}
@endif
{{ __('Basis-Informationen') }}
{{ __('Technischer Name') }} *
{{ __('Berechtigungen') }}
@forelse ($permissionGroups as $groupName => $permissionsInGroup)
{{ $groupName }}
@foreach ($permissionsInGroup as $permission) @endforeach
@empty

{{ __('Keine Berechtigungen fuer diesen Guard vorhanden.') }}

@endforelse
{{ __('Abbrechen') }} {{ __('Aenderungen speichern') }}