Le super admin (table super_admins, master DB) ne pouvait pas se connecter via /api/login car ce firewall n'utilisait que le provider tenant. De même, le JWT n'était pas enrichi pour les super admins, l'endpoint /api/me/roles les rejetait, et le frontend redirigeait systématiquement vers /dashboard. Un chain provider (super_admin + tenant) résout l'authentification, le JwtPayloadEnricher et MyRolesProvider gèrent désormais les deux types d'utilisateurs, et le frontend redirige selon le rôle après login.
54 lines
1.7 KiB
PHP
54 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\SuperAdmin\Infrastructure\Api\Processor;
|
|
|
|
use ApiPlatform\Metadata\Operation;
|
|
use ApiPlatform\State\ProcessorInterface;
|
|
use App\SuperAdmin\Application\Command\CreateEstablishment\CreateEstablishmentCommand;
|
|
use App\SuperAdmin\Application\Command\CreateEstablishment\CreateEstablishmentHandler;
|
|
use App\SuperAdmin\Infrastructure\Api\Resource\EstablishmentResource;
|
|
use App\SuperAdmin\Infrastructure\Security\SecuritySuperAdmin;
|
|
use Override;
|
|
use Symfony\Bundle\SecurityBundle\Security;
|
|
|
|
/**
|
|
* @implements ProcessorInterface<EstablishmentResource, EstablishmentResource>
|
|
*/
|
|
final readonly class CreateEstablishmentProcessor implements ProcessorInterface
|
|
{
|
|
public function __construct(
|
|
private CreateEstablishmentHandler $handler,
|
|
private Security $security,
|
|
) {
|
|
}
|
|
|
|
/**
|
|
* @param EstablishmentResource $data
|
|
*/
|
|
#[Override]
|
|
public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): EstablishmentResource
|
|
{
|
|
/** @var SecuritySuperAdmin $user */
|
|
$user = $this->security->getUser();
|
|
|
|
$result = ($this->handler)(new CreateEstablishmentCommand(
|
|
name: $data->name,
|
|
subdomain: $data->subdomain,
|
|
adminEmail: $data->adminEmail,
|
|
superAdminId: $user->superAdminId(),
|
|
));
|
|
|
|
$resource = new EstablishmentResource();
|
|
$resource->id = $result->establishmentId;
|
|
$resource->tenantId = $result->tenantId;
|
|
$resource->name = $result->name;
|
|
$resource->subdomain = $result->subdomain;
|
|
$resource->databaseName = $result->databaseName;
|
|
$resource->status = 'active';
|
|
|
|
return $resource;
|
|
}
|
|
}
|