CRM/backend/app/Policies/TaskPolicy.php

63 خطوط
1.6 KiB
PHP

<?php
namespace App\Policies;
use App\Models\Task;
use App\Models\User;
use App\Support\AccessControl;
class TaskPolicy
{
public function viewAny(User $user): bool
{
return $user->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');
}
}