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'); }); });