Commit a196d604 authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Adaptation d'unicaaen_utilisateur pour fonctionner avec les périmètres

parent 692412c4
Loading
Loading
Loading
Loading
+5 −0
Changes for api/config/services.yaml: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -5,3 +5,8 @@ services:

  Unicaen\Utilisateur\:
    resource: '../src/*'

parameters:
  unicaen.user_class: 'Unicaen\Utilisateur\Entity\User'
  unicaen.role_class: 'Unicaen\Privilege\Entity\Role'
  unicaen.user_role: 'Unicaen\Privilege\Entity\UserRole'
 No newline at end of file
+3 −1
Changes for api/src/DependencyInjection/UnicaenUtilisateurExtension.php: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -19,13 +19,15 @@ class UnicaenUtilisateurExtension extends Extension implements PrependExtensionI
        // Paramètres (avec valeurs par défaut) que l’app pourra surcharger
        $container->setParameter('unicaen.user_class', \Unicaen\Utilisateur\Entity\User::class);
        $container->setParameter('unicaen.role_class', \Unicaen\Utilisateur\Entity\Role::class);
        $container->setParameter('unicaen.user_role', \Unicaen\Utilisateur\Entity\UserRole::class);

        // Mapping par défaut (pré-ajouté)
        $container->prependExtensionConfig('doctrine', [
            'orm' => [
                'resolve_target_entities' => [
                    \Unicaen\Utilisateur\Model\UnicaenUserInterface::class => '%unicaen.user_class%',
                    \Unicaen\Utilisateur\Model\UserInterface::class => '%unicaen.user_class%',
                    \Unicaen\Utilisateur\Model\RoleInterface::class        => '%unicaen.role_class%',
                    \Unicaen\Utilisateur\Model\UserRoleInterface::class        => '%unicaen.user_role%',
                ],
            ],
        ]);
+21 −0
Changes for api/src/Dto/PerimetreUtilisateurMeDto.php: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Unicaen\Utilisateur\Dto;

use Symfony\Component\Serializer\Attribute\Groups;
use Unicaen\Privilege\Model\PerimetreUserRoleInterface;

class PerimetreUtilisateurMeDto
{
    #[Groups(['user:me'])]
    public int $id;

    public function __construct(?PerimetreUserRoleInterface $perimetreUserRole)
    {
        if(!$perimetreUserRole){
            $this->id = 0;
            return;
        }
        $this->id = $perimetreUserRole->getId();
    }
}
+11 −0
Changes for api/src/Dto/UtilisateurMeResource.php: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Unicaen\Utilisateur\Dto;

use Symfony\Component\Serializer\Attribute\Groups;
use Unicaen\Privilege\Model\PerimetreUserRoleInterface;

class UtilisateurMeResource
{
@@ -15,6 +16,16 @@ class UtilisateurMeResource
    #[Groups(['user:me'])]
    public array $roles;

    #[Groups(['user:me'])]
    public bool $isPerimetreEnable;

    // Ce champ est utilisé uniquement si le périmètre n'est pas activé, sinon c'est activePerimetreUserRole qui est utilisé
    #[Groups(['user:me'])]
    public ?string $activeRole;

    #[Groups(['user:me'])]
    public ?PerimetreUtilisateurMeDto $activePerimetreUserRole = null;

    #[Groups(['user:me'])]
    public array $privileges = [];
}
+30 −16
Changes for api/src/Entity/AbstractRole.php: 30 added lines, 16 removed lines.
Original line number Diff line number Diff line
@@ -6,8 +6,10 @@ use ApiPlatform\Metadata\ApiResource;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Unicaen\Utilisateur\Model\RoleInterface;
use Unicaen\Utilisateur\Model\UnicaenUserInterface;
use Unicaen\Utilisateur\Model\UserInterface;
use Unicaen\Privilege\Model\PrivilegeInterface;
use Unicaen\Privilege\Model\PerimetreCategorieInterface;
use Unicaen\Utilisateur\Model\UserRoleInterface;


#[ORM\MappedSuperclass]
@@ -33,12 +35,15 @@ abstract class AbstractRole implements RoleInterface
    protected bool $accessibleExterieur = true;
    protected bool $displayed = true;

    #[ORM\ManyToMany(targetEntity: UnicaenUserInterface::class, mappedBy: 'roles')]
    #[ORM\OneToMany(targetEntity: UserRoleInterface::class, mappedBy: 'role', cascade: ['persist', 'remove'], orphanRemoval: true)]
    protected Collection $users;

    #[ORM\ManyToMany(targetEntity: PrivilegeInterface::class, mappedBy: 'roles')]
    protected Collection $privileges;

    #[ORM\ManyToMany(targetEntity: PerimetreCategorieInterface::class, mappedBy: 'roles')]
    protected Collection $perimetreCategories;

    public function getId() : ?int
    {
        return $this->id;
@@ -142,17 +147,9 @@ abstract class AbstractRole implements RoleInterface

    public function getUsers() : Collection
    {
        return $this->users;
    }

    public function addUser(UnicaenUserInterface $user) : void
    {
        $this->users->add($user);
    }

    public function removeUser(UnicaenUserInterface $user) : void
    {
        $this->users->removeElement($user);
        return $this->users->map(function (UserRoleInterface $userRole) {
            return $userRole->getUser();
        });
    }

    public function getPrivileges() : Collection
@@ -160,7 +157,7 @@ abstract class AbstractRole implements RoleInterface
        return $this->privileges;
    }

    public function addPrivilege(PrivilegeInterface $privilege) : void
    public function addPrivilege(PrivilegeInterface $privilege) : RoleInterface
    {
        if (!$this->privileges->contains($privilege)) {
            $this->privileges->add($privilege);
@@ -169,6 +166,7 @@ abstract class AbstractRole implements RoleInterface
                $privilege->addRole($this);
            }
        }
        return $this;
    }

    public function hasPrivilege(PrivilegeInterface $privilege) : bool
@@ -176,12 +174,28 @@ abstract class AbstractRole implements RoleInterface
        return $this->privileges->contains($privilege);
    }

    public function removePrivilege(PrivilegeInterface $privilege) : void
    public function removePrivilege(PrivilegeInterface $privilege) : RoleInterface
    {
        $this->privileges->removeElement($privilege);
        return $this;
    }

    /** Fonctions magiques ********************************************************************************************/
    public function getPerimetreCategories(): Collection
    {
        return $this->perimetreCategories;
    }

    public function addPerimetreCategorie(PerimetreCategorieInterface $perimetreCategorie): RoleInterface
    {
        $this->perimetreCategories->add($perimetreCategorie);
        return $this;
    }

    public function removePerimetreCategorie(PerimetreCategorieInterface $perimetreCategorie): RoleInterface
    {
        $this->perimetreCategories->removeElement($perimetreCategorie);
        return $this;
    }

    public function __toString() : string
    {
Loading