Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Service/
Upload File :
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));
    }
}