tenant_id === session('tenant_id') && ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasPermissionTo('view tasks')); } /** * Determine whether the user can view the task. */ public function view(User $user, Task $task): bool { if ($user->tenant_id !== $task->tenant_id) { return false; } // Admin and managers can view all if ($user->hasRole('admin') || $user->hasRole('manager')) { return true; } // Check if user is a member of the project return $task->project && $task->project->users()->where('user_id', $user->id)->exists(); } /** * Determine whether the user can create tasks. */ public function create(User $user): bool { return $user->tenant_id === session('tenant_id') && ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasPermissionTo('create tasks')); } /** * Determine whether the user can update the task. */ public function update(User $user, Task $task): bool { if ($user->tenant_id !== $task->tenant_id) { return false; } if ($user->hasRole('admin') || $user->hasRole('manager')) { return true; } // User can update if they are the assignee or reporter return $task->assignee_id === $user->id || $task->reporter_id === $user->id; } /** * Determine whether the user can delete the task. */ public function delete(User $user, Task $task): bool { return $user->tenant_id === $task->tenant_id && ($user->hasRole('admin') || $user->hasPermissionTo('delete tasks')); } /** * Determine whether the user can update the task status. */ public function updateStatus(User $user, Task $task): bool { if ($user->tenant_id !== $task->tenant_id) { return false; } if ($user->hasRole('admin') || $user->hasRole('manager')) { return true; } // User can update status if they are a member of the project return $task->project && $task->project->users()->where('user_id', $user->id)->exists(); } }