project = $project; $this->loadUsers(); } public function loadUsers() { $this->assignedUsers = $this->project->users()->withPivot('role_in_project')->get(); $assignedIds = $this->assignedUsers->pluck('id')->toArray(); $this->allUsers = User::whereNotIn('id', $assignedIds)->orderBy('name')->get(); } public function assignUser() { $user = Auth::user(); if (!$user->can('assign users') && !$user->hasRole('Admin')) { session()->flash('error', 'No tienes permisos para asignar usuarios.'); return; } $this->validate([ 'selectedUserId' => 'required|exists:users,id', 'selectedRole' => 'required|in:supervisor,consultant,client,viewer', ]); $this->project->users()->attach($this->selectedUserId, [ 'role_in_project' => $this->selectedRole ]); $this->reset(['selectedUserId', 'selectedRole']); $this->loadUsers(); $this->dispatch('notify', 'Usuario asignado al proyecto.'); } public function removeUser($userId) { $user = Auth::user(); if (!$user->can('assign users') && !$user->hasRole('Admin')) { session()->flash('error', 'Sin permisos.'); return; } $this->project->users()->detach($userId); $this->loadUsers(); $this->dispatch('notify', 'Usuario eliminado del proyecto.'); } public function changeRole($userId, $role) { if (!in_array($role, ['supervisor', 'consultant', 'client', 'viewer'])) return; $this->project->users()->updateExistingPivot($userId, [ 'role_in_project' => $role ]); $this->loadUsers(); $this->dispatch('notify', 'Rol actualizado.'); } public function render() { return view('livewire.project-users'); } }