Role::withCount(['users', 'permissions'])->orderBy('name')->get()]); } public function create() { return view('roles::form', ['role' => new Role(['guard_name' => 'web']), 'permissions' => Permission::orderBy('name')->get()]); } public function store(Request $request) { $data = $this->validated($request); $role = Role::create(['name' => $data['name'], 'guard_name' => 'web']); $role->syncPermissions($data['permissions'] ?? []); return redirect()->route('administration.roles.index')->with('status', 'Role created.'); } public function edit(Role $role) { return view('roles::form', ['role' => $role->load('permissions'), 'permissions' => Permission::orderBy('name')->get()]); } public function update(Request $request, Role $role) { $data = $this->validated($request, $role); $role->update(['name' => $data['name']]); $role->syncPermissions($data['permissions'] ?? []); return redirect()->route('administration.roles.index')->with('status', 'Role updated.'); } public function destroy(Role $role) { abort_if($role->name === 'admin', 422, 'The administrator role cannot be deleted.'); $role->delete(); return back()->with('status', 'Role deleted.'); } private function validated(Request $request, ?Role $role = null): array { return $request->validate(['name' => ['required', 'string', 'max:100', Rule::unique('roles', 'name')->ignore($role)], 'permissions' => ['array'], 'permissions.*' => ['string', 'exists:permissions,name']]); } }