validate([ 'name' => [ 'required', 'min:3', 'max:50', Rule::unique('roles', 'name') ->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()->create([ 'name' => $validated['name'], 'guard_name' => $this->guardName, ]); $role->syncPermissions($validated['permissions'] ?? []); session()->flash('success', 'Rolle erfolgreich erstellt.'); $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()); } }; ?>