|
|
@@ -5,7 +5,10 @@ namespace App\Service\Access;
|
|
|
|
|
|
use App\ApiResources\Profile\AccessProfile;
|
|
|
use App\Entity\Access\Access;
|
|
|
+use App\Repository\Access\AccessRepository;
|
|
|
use App\Service\Organization\OrganizationProfileCreator;
|
|
|
+use Doctrine\Common\Collections\ArrayCollection;
|
|
|
+use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
|
|
use Symfony\Component\Security\Core\Role\RoleHierarchyInterface;
|
|
|
|
|
|
/**
|
|
|
@@ -16,32 +19,70 @@ class AccessProfileCreator
|
|
|
{
|
|
|
private RoleHierarchyInterface $roleHierarchy;
|
|
|
private OrganizationProfileCreator $organizationProfileCreator;
|
|
|
+ private AccessRepository $accessRepository;
|
|
|
+ private Utils $accessUtils;
|
|
|
|
|
|
public function __construct(
|
|
|
RoleHierarchyInterface $roleHierarchy,
|
|
|
- OrganizationProfileCreator $organizationProfileCreator
|
|
|
+ OrganizationProfileCreator $organizationProfileCreator,
|
|
|
+ AccessRepository $accessRepository,
|
|
|
+ Utils $accessUtils
|
|
|
)
|
|
|
{
|
|
|
$this->roleHierarchy = $roleHierarchy;
|
|
|
$this->organizationProfileCreator = $organizationProfileCreator;
|
|
|
+ $this->accessRepository = $accessRepository;
|
|
|
+ $this->accessUtils = $accessUtils;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Créer une ressource AccessProfile à partir d'une entité Access
|
|
|
+ * On récupère l'accessProfile complet correspondant à l'Access
|
|
|
* @param Access $access
|
|
|
* @return AccessProfile
|
|
|
- * @see AccessProfileCreatorTest::testGetAccessProfile()
|
|
|
+ * @throws \Exception
|
|
|
*/
|
|
|
public function getAccessProfile(Access $access): AccessProfile{
|
|
|
+ $validAccesses = $this->accessRepository->findAllValidAccesses($access);
|
|
|
+ if(empty($validAccesses))
|
|
|
+ throw new AuthenticationException('no_valid_access', 401);
|
|
|
+
|
|
|
+ //L'Access en paramètre est celui de la connexion
|
|
|
+ $mainAccessProfile = $this->createAccessProfile($access);
|
|
|
+
|
|
|
+ //On remplit les autres Accesses (multi comptes)
|
|
|
+ $otherAccesses = $this->accessUtils->filterAccesses($validAccesses, $access);
|
|
|
+ foreach ($otherAccesses as $otherAccess){
|
|
|
+ $mainAccessProfile->addAccess($this->createLightAccessProfile($otherAccess));
|
|
|
+ }
|
|
|
+
|
|
|
+ return $mainAccessProfile;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Créer une ressource AccessProfile à partir d'une entité Access
|
|
|
+ * @param Access $access
|
|
|
+ * @return AccessProfile
|
|
|
+ */
|
|
|
+ public function createAccessProfile(Access $access): AccessProfile{
|
|
|
$accessProfile = new AccessProfile();
|
|
|
- $accessProfile
|
|
|
+ return $accessProfile
|
|
|
->setId($access->getId())
|
|
|
->setIsAdminAccess($access->getAdminAccess())
|
|
|
->setName($access->getPerson()->getName())
|
|
|
->setGivenName($access->getPerson()->getGivenName())
|
|
|
->setRoles($this->roleHierarchy->getReachableRoleNames($access->getRoles()))
|
|
|
->setOrganization($this->organizationProfileCreator->getOrganizationProfile($access->getOrganization()));
|
|
|
+ }
|
|
|
|
|
|
- return $accessProfile;
|
|
|
+ /**
|
|
|
+ * Classe permettant de créer et Setter les éléments de base d'une ressource AccessProfile à partir d'une entité Access
|
|
|
+ * @param Access $access
|
|
|
+ * @return AccessProfile
|
|
|
+ */
|
|
|
+ public function createLightAccessProfile(Access $access): AccessProfile{
|
|
|
+ $accessProfile = new AccessProfile();
|
|
|
+ return $accessProfile
|
|
|
+ ->setId($access->getId())
|
|
|
+ ->setOrganization($this->organizationProfileCreator->setCommonElements($access->getOrganization()));
|
|
|
}
|
|
|
}
|