can('view_own_tasks') || $user->can('view_team_tasks') || $user->can('view_all_tasks'); } public function view(User $user, Task $task): bool { return AccessControl::canAccessTask($user, $task); } public function create(User $user): bool { return $user->can('create_tasks'); } public function update(User $user, Task $task): bool { return $task->created_by === $user->id && $this->view($user, $task) && ($user->can('edit_own_tasks') || $user->can('edit_team_tasks')); } public function assign(User $user, Task $task, ?int $newAssigneeId = null): bool { if (! $this->view($user, $task)) { return false; } $isReassign = $task->assigned_to !== null && $task->assigned_to !== $newAssigneeId; return $isReassign ? $user->can('reassign_tasks') : $user->can('assign_tasks'); } public function transition(User $user, Task $task): bool { return $user->can('complete_tasks') && ($task->assigned_to === $user->id || $task->created_by === $user->id) && $this->view($user, $task); } public function delete(User $user, Task $task): bool { return $task->created_by === $user->id && $user->can('delete_tasks') && $this->view($user, $task); } public function bulkManage(User $user): bool { return $user->can('bulk_manage_tasks'); } }