use Nexus\Identity\Contracts\PolicyEvaluatorInterface;
use Nexus\Identity\ValueObjects\Policy;
use Nexus\Hrm\Contracts\EmployeeQueryInterface;
public function boot(): void
{
$policyEvaluator = $this->app->make(PolicyEvaluatorInterface::class);
$employeeQuery = $this->app->make(EmployeeQueryInterface::class);
// Register leave proxy policy
$policy = Policy::define('hrm.leave.apply_on_behalf')
->description('User can apply leave on behalf of employees in same department or as manager')
->check(function($user, $action, $resource, $context) use ($employeeQuery) {
$targetEmployeeId = $context['target_employee_id'] ?? null;
if (!$targetEmployeeId) {
return false;
}
$userEmployee = $employeeQuery->findByUserId($user->getId());
$targetEmployee = $employeeQuery->findById($targetEmployeeId);
if (!$userEmployee || !$targetEmployee) {
return false;
}
// Same department OR user is manager
return $userEmployee->getDepartmentId() === $targetEmployee->getDepartmentId()
|| $userEmployee->getId() === $targetEmployee->getManagerId();
});
$policyEvaluator->registerPolicy($policy->getName(), $policy->getEvaluator());
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.