Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018BAUeCFpDkRD6tU5wGsc1C
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { SubscriptionPlan } from '../value-objects/subscription-plan.vo';
|
|
|
|
export const PLATFORM_ADMIN_ROLE = 'ADMIN';
|
|
|
|
/**
|
|
* Offre effective d'un utilisateur.
|
|
*
|
|
* Un compte ADMIN dispose de l'offre Platinium quelle que soit celle de son
|
|
* organisation : c'est deja ce que renvoie l'apercu d'abonnement, donc ce que
|
|
* lit toute l'interface (badge d'offre, licences illimitees, absence
|
|
* d'echeance).
|
|
*
|
|
* Cette regle vivait uniquement dans `SubscriptionService`. L'assistant, qui
|
|
* lisait l'abonnement brut, appliquait donc le quota Bronze de l'organisation a
|
|
* un administrateur a qui le produit affichait « Platinium » partout ailleurs.
|
|
* La regle est ici pour qu'un seul endroit la porte et que les deux lectures ne
|
|
* puissent plus diverger.
|
|
*
|
|
* @param role Role de l'utilisateur, tel qu'il figure dans le JWT.
|
|
* @param plan Offre de l'organisation, ou `null` sans abonnement exploitable.
|
|
*/
|
|
export function effectivePlan(
|
|
role: string | undefined,
|
|
plan: SubscriptionPlan | null
|
|
): SubscriptionPlan {
|
|
if (role === PLATFORM_ADMIN_ROLE) return SubscriptionPlan.platinium();
|
|
return plan ?? SubscriptionPlan.bronze();
|
|
}
|