| Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Service/ |
| Current File : /var/www/v3.cesa.co.za/src/UserBundle/Service/MemberPortalUserService.php |
<?php
namespace App\UserBundle\Service;
use App\MemberBundle\Entity\MemberContact;
use App\MemberBundle\Repository\MemberContactRepository;
use App\UserBundle\Entity\UserLogin;
/**
* Business logic for member portal (user_login) authentication.
*/
final class MemberPortalUserService
{
public const ALLOWED_MEMBER_STATUSES = ['Member', 'Testing', 'Retired'];
public function __construct(
private readonly MemberContactRepository $memberContactRepository,
) {
}
public function buildLoginContext(UserLogin $user): MemberPortalLoginContext
{
$contactId = $user->getContactId();
if ($contactId === null || $contactId <= 0) {
return new MemberPortalLoginContext(null, null);
}
$contact = $this->memberContactRepository->findByContactIdWithMemberFirm(
$contactId,
self::ALLOWED_MEMBER_STATUSES,
);
if (!$contact instanceof MemberContact) {
return new MemberPortalLoginContext(null, null);
}
$office = $contact->getMemberOffice();
$firm = $office?->getMemberFirm();
return new MemberPortalLoginContext($contact, $firm);
}
/**
* @return list<string>
*/
public function resolveRoles(UserLogin $user, MemberPortalLoginContext $context): array
{
if (!$context->hasMemberFirm()) {
return ['NONE'];
}
return [
'ROLE_MEMBER_FIRM',
'ROLE_LOGGED_IN',
'ROLE_MY_DETAILS',
'ROLE_USER',
'IS_AUTHENTICATED_FULLY',
];
}
public function applyLoginContext(UserLogin $user, MemberPortalLoginContext $context): void
{
$user->setMemberFirmContext($context->getMemberFirmId(), $context->hasMemberFirm());
$user->setResolvedRoles($this->resolveRoles($user, $context));
}
}