orderBy('name')->paginate(15); return view('admin.roles.index', [ 'roles' => $roles, ]); } public function create() { return view('admin.roles.create'); } public function store(Request $request) { $validated = $request->validate([ 'name' => ['required', 'string', 'max:255', Rule::unique('roles', 'name')], 'description' => ['nullable', 'string', 'max:255'], ]); Role::create([ 'name' => $validated['name'], 'guard_name' => 'web', 'description' => $validated['description'] ?? null, ]); return redirect()->route('admin.roles.index')->with('status', __('Role created.')); } public function show(Role $role, Request $request) { $search = $request->string('search')->toString(); $usersQuery = $role->users()->orderBy('name'); if ($search) { $usersQuery->where(function ($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%"); }); } $users = $usersQuery->paginate(15)->withQueryString(); $availableUsers = User::orderBy('name')->select('id', 'name', 'email')->get(); return view('admin.roles.show', [ 'role' => $role, 'users' => $users, 'availableUsers' => $availableUsers, 'search' => $search, ]); } public function edit(Role $role) { return view('admin.roles.edit', [ 'role' => $role, ]); } public function update(Request $request, Role $role) { $validated = $request->validate([ 'name' => ['required', 'string', 'max:255', Rule::unique('roles', 'name')->ignore($role->id)], 'description' => ['nullable', 'string', 'max:255'], ]); $role->update($validated); return redirect()->route('admin.roles.show', $role)->with('status', __('Role updated.')); } public function assignUsers(Request $request, Role $role) { $validated = $request->validate([ 'user_ids' => ['required', 'array'], 'user_ids.*' => ['exists:users,id'], ]); $users = User::whereIn('id', $validated['user_ids'])->get(); foreach ($users as $user) { $user->assignRole($role); } return redirect()->route('admin.roles.show', $role)->with('status', __('Users assigned to role.')); } public function removeUser(Role $role, User $user) { $user->removeRole($role); return redirect()->route('admin.roles.show', $role)->with('status', __('Role removed from user.')); } }