All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [x] Pas de régression - [x] TU/TI/TF rédigée - [x] TU/TI/TF OK - [ ] CHANGELOG modifié Co-authored-by: Matthieu <mtholot19@gmail.com> Reviewed-on: #8 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
54 lines
1.9 KiB
PHP
54 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Module\Sites\Infrastructure\ApiPlatform\Resource;
|
|
|
|
use ApiPlatform\Metadata\ApiResource;
|
|
use ApiPlatform\Metadata\Patch;
|
|
use App\Module\Sites\Domain\Entity\Site;
|
|
use App\Module\Sites\Infrastructure\ApiPlatform\State\Processor\CurrentSiteProcessor;
|
|
use Symfony\Component\Serializer\Attribute\Groups;
|
|
|
|
/**
|
|
* Ressource API Platform virtuelle (non mappee Doctrine) qui porte
|
|
* l'operation `PATCH /api/me/current-site` : basculement du site courant
|
|
* de l'utilisateur authentifie.
|
|
*
|
|
* `read: false` informe API Platform qu'il ne doit pas tenter de charger
|
|
* une entite existante via un Provider — l'operation denormalise le payload
|
|
* directement dans cette ressource, puis CurrentSiteProcessor prend le relais.
|
|
*
|
|
* `shortName: 'CurrentSite'` : evite toute collision avec l'entite `Site`
|
|
* dans le routage et la documentation OpenAPI.
|
|
*
|
|
* Securite : l'autorisation "ROLE_USER" suffit au niveau voter — la verification
|
|
* fine (le site demande fait-il partie des sites autorises de l'user ?)
|
|
* est faite par CurrentSiteProcessor, car elle dependence de l'user
|
|
* authentifie, pas d'une permission statique.
|
|
*/
|
|
#[ApiResource(
|
|
shortName: 'CurrentSite',
|
|
operations: [
|
|
new Patch(
|
|
uriTemplate: '/me/current-site',
|
|
security: "is_granted('ROLE_USER')",
|
|
normalizationContext: ['groups' => ['me:read']],
|
|
denormalizationContext: ['groups' => ['current-site:write']],
|
|
processor: CurrentSiteProcessor::class,
|
|
read: false,
|
|
priority: 1,
|
|
),
|
|
],
|
|
)]
|
|
final class CurrentSiteResource
|
|
{
|
|
/**
|
|
* Site cible du switch, denormalise depuis l'IRI envoye dans le body :
|
|
* `{ "site": "/api/sites/{id}" }`. Resolu automatiquement par
|
|
* l'IriConverter d'API Platform en instance de `Site`.
|
|
*/
|
|
#[Groups(['current-site:write'])]
|
|
public ?Site $site = null;
|
|
}
|