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

51 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Policies\Concerns;
use App\Models\User;
trait ScopedByDepartment
{
protected function userManagesDepartment(User $user, ?int $departmentId): bool
{
if (! $user->hasRole('department_manager')) {
return true;
}
if ($departmentId === null) {
return false;
}
return $user->department_id === $departmentId;
}
protected function userIsViewer(User $user): bool
{
return $user->hasRole('viewer');
}
protected function isSuperAdmin(User $user): bool
{
return $user->hasRole('super_admin');
}
protected function hasFullAccess(User $user): bool
{
return $user->hasRole(['administrator', 'hr_manager']);
}
protected function canForceDelete(User $user): bool
{
return $user->hasRole('administrator');
}
protected function canRead(User $user): bool
{
return $this->hasFullAccess($user)
|| $user->hasRole(['supervisor', 'department_manager'])
|| $this->userIsViewer($user);
}
}