Files
hr/app/Policies/EmployeePolicy.php
2026-07-30 17:24:40 +05:00

118 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Policies;
use App\Models\Employee;
use App\Models\User;
use App\Policies\Concerns\ScopedByDepartment;
class EmployeePolicy
{
use ScopedByDepartment;
public function viewAny(User $user): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
return $this->canRead($user);
}
public function view(User $user, Employee $employee): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
if ($this->hasFullAccess($user) || $user->hasRole('supervisor')) {
return true;
}
if ($this->userIsViewer($user)) {
return true;
}
if ($user->hasRole('department_manager')) {
return $this->userManagesDepartment($user, $employee->department_id);
}
return false;
}
public function create(User $user): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
if ($this->hasFullAccess($user)) {
return true;
}
return $user->hasRole('department_manager');
}
public function update(User $user, Employee $employee): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
if ($this->hasFullAccess($user)) {
return true;
}
if ($user->hasRole('department_manager')) {
return $this->userManagesDepartment($user, $employee->department_id);
}
return false;
}
public function delete(User $user, Employee $employee): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
if ($this->hasFullAccess($user)) {
return true;
}
if ($user->hasRole('department_manager')) {
return $this->userManagesDepartment($user, $employee->department_id);
}
return false;
}
public function restore(User $user, Employee $employee): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
if ($this->hasFullAccess($user)) {
return true;
}
if ($user->hasRole('department_manager')) {
return $this->userManagesDepartment($user, $employee->department_id);
}
return false;
}
public function forceDelete(User $user, Employee $employee): bool
{
if ($this->isSuperAdmin($user)) {
return true;
}
return $this->canForceDelete($user);
}
}