63 خطوط
1.6 KiB
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');
|
|
}
|
|
}
|