Feat: Управление группами пользователей

 Modal добавления в группу на странице пользователя
 Метод addUser — добавление пользователя в группу
 Метод removeUser — удаление пользователя из группы
 Фильтр доступных групп (общие + группы организации)
 Проверка: нельзя добавить в группу другой организации
 Маршруты: POST /users/{user}/groups/add, DELETE /groups/{group}/users/{user}/remove

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad
2026-03-30 10:25:10 +08:00
co-authored by Qwen-Coder
parent 6599b8d5b6
commit f198afd8a0
4 changed files with 102 additions and 5 deletions
@@ -144,4 +144,37 @@ class GroupUserController extends Controller
return redirect()->route('admin.groups.index')
->with('success', 'Группа успешно удалена.');
}
/**
* Добавить пользователя в группу
*/
public function addUser(User $user, Request $request)
{
$validated = $request->validate([
'group_id' => 'required|exists:groups,id',
]);
$group = Group::findOrFail($validated['group_id']);
// Проверка доступа
if ($group->organization_id && $user->organization_id !== $group->organization_id) {
return back()->with('error', 'Нельзя добавить пользователя в группу другой организации.');
}
$group->users()->attach($user->id);
return back()->with('success', 'Пользователь добавлен в группу.');
}
/**
* Удалить пользователя из группы
*/
public function removeUser(Group $group, User $user)
{
Gate::authorize('update', $group);
$group->users()->detach($user->id);
return back()->with('success', 'Пользователь удалён из группы.');
}
}
+18 -2
View File
@@ -89,10 +89,26 @@ class UserController extends Controller
public function show(User $user)
{
Gate::authorize('view', $user);
$user->load(['organization', 'roles', 'groups']);
return view('admin.users.show', compact('user'));
// Получаем доступные группы для пользователя
if ($user->organization_id) {
$availableGroups = Group::whereNull('organization_id')
->orWhere('organization_id', $user->organization_id)
->whereDoesntHave('users', function($q) use ($user) {
$q->where('users.id', $user->id);
})
->get();
} else {
$availableGroups = Group::whereNull('organization_id')
->whereDoesntHave('users', function($q) use ($user) {
$q->where('users.id', $user->id);
})
->get();
}
return view('admin.users.show', compact('user', 'availableGroups'));
}
public function edit(User $user)