From f198afd8a087a1f194efae7a424387836b31a228 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Mon, 30 Mar 2026 10:25:10 +0800 Subject: [PATCH] =?UTF-8?q?Feat:=20=D0=A3=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Modal добавления в группу на странице пользователя ✅ Метод addUser — добавление пользователя в группу ✅ Метод removeUser — удаление пользователя из группы ✅ Фильтр доступных групп (общие + группы организации) ✅ Проверка: нельзя добавить в группу другой организации ✅ Маршруты: POST /users/{user}/groups/add, DELETE /groups/{group}/users/{user}/remove Co-authored-by: Qwen-Coder --- .../Controllers/Admin/GroupUserController.php | 33 ++++++++++++ app/Http/Controllers/Admin/UserController.php | 20 ++++++- resources/views/admin/users/show.blade.php | 52 +++++++++++++++++-- routes/web.php | 2 + 4 files changed, 102 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Admin/GroupUserController.php b/app/Http/Controllers/Admin/GroupUserController.php index 3ca8bbe..74b7bb9 100755 --- a/app/Http/Controllers/Admin/GroupUserController.php +++ b/app/Http/Controllers/Admin/GroupUserController.php @@ -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', 'Пользователь удалён из группы.'); + } } diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index fd376e5..5af50ad 100755 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -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) diff --git a/resources/views/admin/users/show.blade.php b/resources/views/admin/users/show.blade.php index ff9bb85..ddea3f1 100644 --- a/resources/views/admin/users/show.blade.php +++ b/resources/views/admin/users/show.blade.php @@ -30,12 +30,28 @@
-
Группы
+
+
Группы
+ @can('update', App\Models\Group::class) + + @endcan +
@if($user->groups->count() > 0) -
    +
      @foreach($user->groups as $group) -
    • {{ $group->name }} ({{ $group->organization?->name }})
    • +
    • +
      + {{ $group->name }} + {{ $group->organization?->name ?? 'Общая группа' }} +
      + @can('update', $group) +
      + @csrf @method('DELETE') + +
      + @endcan +
    • @endforeach
    @else @@ -48,4 +64,34 @@
+ + + @endsection diff --git a/routes/web.php b/routes/web.php index 457494c..cb3254b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -50,5 +50,7 @@ Route::middleware('auth')->group(function () { Route::resource('tests.questions', QuestionController::class); Route::resource('course-assignments', CourseAssignmentController::class); Route::resource('groups', GroupUserController::class); + Route::post('/users/{user}/groups/add', [GroupUserController::class, 'addUser'])->name('groups.users.add'); + Route::delete('/groups/{group}/users/{user}/remove', [GroupUserController::class, 'removeUser'])->name('groups.users.remove'); }); });