feat: Attribution de rôles multiples par utilisateur

Les utilisateurs Classeo étaient limités à un seul rôle, alors que
dans la réalité scolaire un directeur peut aussi être enseignant,
ou un parent peut avoir un rôle vie scolaire. Cette limitation
obligeait à créer des comptes distincts par fonction.

Le modèle User supporte désormais plusieurs rôles simultanés avec
basculement via le header. L'admin peut attribuer/retirer des rôles
depuis l'interface de gestion, avec des garde-fous : pas d'auto-
destitution, pas d'escalade de privilèges (seul SUPER_ADMIN peut
attribuer SUPER_ADMIN), vérification du statut actif pour le
switch de rôle, et TTL explicite sur le cache de rôle actif.
This commit is contained in:
2026-02-10 07:57:43 +01:00
parent 9ccad77bf0
commit e930c505df
93 changed files with 2527 additions and 165 deletions

View File

@@ -4,8 +4,18 @@ declare(strict_types=1);
namespace App\Administration\Application\Command\InviteUser;
use InvalidArgumentException;
use function is_string;
final readonly class InviteUserCommand
{
/** @var string[] */
public array $roles;
/**
* @param string[] $roles
*/
public function __construct(
public string $tenantId,
public string $schoolName,
@@ -14,6 +24,16 @@ final readonly class InviteUserCommand
public string $firstName,
public string $lastName,
public ?string $dateNaissance = null,
array $roles = [],
) {
$resolved = $roles !== [] ? $roles : [$role];
foreach ($resolved as $r) {
if (!is_string($r)) {
throw new InvalidArgumentException('Chaque rôle doit être une chaîne de caractères.');
}
}
$this->roles = $resolved;
}
}