Modèle d'autorisations pour niveaux clients : plans, limites et indicateurs (flags)
Concevez un modèle d'autorisations avec des schémas clairs pour plans, limites et indicateurs afin que les admins et le support puissent ajuster l'accès client en toute sécurité sans ingénierie.

Pourquoi les équipes ont besoin d'un modèle d'autorisations
Si vous vendez plus d'un niveau, vous finirez par recevoir le même ticket support : « Le client X a payé pour Pro, mais il n'a pas accès à la fonctionnalité Y. » Sans système clair, le support ne peut pas corriger directement. Un simple changement d'accès devient une tâche pour l'ingénierie.
Le problème majeur est l'incohérence. Les règles d'accès se retrouvent dispersées dans le produit : une case à cocher dans l'écran d'administration, une vérification hardcodée dans l'API, une note dans un tableur et une mise à jour ponctuelle en base de données du trimestre dernier. Les clients voient des comportements différents selon l'endroit, et personne n'est sûr de la règle réelle.
Un modèle d'autorisations vous donne une source unique de vérité pour qui peut faire quoi, basée sur leur plan et d'éventuelles exceptions approuvées. Il rend les niveaux prévisibles (la tarification reste crédible), tout en laissant de la place pour la vie réelle : une montée temporaire, un ajustement de quota, ou une fonctionnalité pilote pour un compte.
« Ajuster sans ingénierie » doit être concret. En pratique :
- Le support modifie l'accès via un outil d'administration en éditant des données, pas en demandant un déploiement.
- Le produit lit les mêmes données d'autorisations partout (backend, application web, mobile).
- Les exceptions peuvent être limitées dans le temps et réversibles, pas des bricolages permanents.
- Les changements sont journalisés avec qui l'a fait, quand et pourquoi.
Par exemple, un client sur le niveau Business atteint une limite d'utilisateurs actifs pendant une saison chargée. Le support devrait pouvoir accorder +10 sièges pendant 14 jours, et le système devrait revenir automatiquement en arrière à la fin de la période. L'ingénierie n'intervient que lorsqu'on ajoute une toute nouvelle capacité, pas pour les ajustements courants d'accès.
Les éléments de base : clients, plans et autorisations
Un bon modèle d'autorisations commence par quelques objets clairs et une responsabilité définie. Si ces bases sont floues, le support finit par demander à l'ingénierie « encore une exception » chaque semaine.
Voici un ensemble simple de briques :
- Client (account/tenant) : l'entreprise ou la personne qui utilise votre produit.
- Abonnement (Subscription) : la relation commerciale (essai, actif, annulé), souvent liée au système de facturation.
- Plan : le niveau nommé (Free, Pro, Enterprise) qui définit l'accès par défaut.
- Autorisation (Entitlement) : le comportement effectivement autorisé, dérivé du plan plus les overrides.
L'évaluation des autorisations n'est pas la facturation. La facturation répond à « que devons-nous facturer et quand ? » Les autorisations répondent à « que peut faire ce client maintenant ? » Un client peut être impayé mais en période de grâce, ou payé mais temporairement bloqué pour conformité. Séparez ces décisions pour que la finance puisse corriger les factures sans modifier l'accès produit.
Plusieurs équipes s'appuient sur ce dispositif :
- Le produit définit le contenu des plans.
- Le support a besoin de contrôles sûrs pour accorder ou retirer des accès.
- Les opérations commerciales ont besoin de règles cohérentes pour les offres et renouvellements.
- La finance a besoin d'un mapping fiable entre ce qui a été vendu et l'accès fourni.
Définissez des limites tôt. Rendez le contenu des plans et les overrides clients configurables (pour que le support puisse agir), mais conservez le comportement cœur en code. Des exemples de « comportement cœur » : comment vous calculez le quota restant, comment vous gérez les essais expirés, et quelles actions doivent être auditées.
Flags, limites et quotas : choisissez le bon type
La plupart des problèmes de niveaux s'atténuent quand vous nommez correctement l'autorisation. Il y a trois types courants, chacun répondant à une question différente :
- Flags booléens : quelque chose est-il activé ou désactivé ? Exemple :
export_enabled = true. - Limites numériques : quelle quantité est autorisée en même temps ? Exemple :
max_seats = 10. - Quotas : quelle quantité peut être utilisée sur une période ? Exemple :
api_calls_per_month = 100000.
Les flags conviennent aux fonctionnalités qui ne doivent pas fonctionner partiellement. Si l'export est désactivé, cachez le bouton et bloquez aussi l'endpoint. Les limites conviennent pour des paramètres de capacité qui ne se réinitialisent pas, comme les sièges, projets ou vues sauvegardées.
Les quotas demandent plus d'attention parce que le temps compte. Les tickets support diminuent vite quand la règle de réinitialisation est écrite et visible dans l'UI admin.
Le périmètre (scope) est une autre décision qui évite la confusion. Un flag comme « SSO SAML activé » est généralement au niveau du compte. « Max projects » peut être au niveau d'un workspace. « Peut exécuter des rapports » peut être au niveau utilisateur si vous vendez des add-ons par rôle.
Pour les quotas, choisissez une règle de réinitialisation par quota et tenez-vous-y :
- Jamais (crédits à vie)
- Mensuel (mois calendaire)
- Fenêtre glissante (30 derniers jours)
- Par période de facturation (correspond à la facture)
Si la règle de réinitialisation change selon le plan, traitez la règle elle-même comme une partie de l'autorisation, pas comme une connaissance tacite.
Un schéma de base pratique pour les autorisations
Un modèle d'autorisations convivial pour le support fonctionne souvent mieux s'il reste sobre : quelques tables, clés claires et enregistrements bornés dans le temps que l'on peut auditer. L'objectif est de permettre aux admins de changer l'accès en éditant des données, pas en déployant du code.
Commencez par quatre tables principales : plans, plan_entitlements, customers et customer_overrides.
plansdécrit les niveaux (Free, Pro, Enterprise).plan_entitlementsdécrit ce que chaque plan inclut.customersréférence un plan.customer_overridescouvre les exceptions pour un client sans changer le plan pour tout le monde.
Une forme relationnelle compacte qui fonctionne bien :
plans:id,name,description,is_activeplan_entitlements:id,plan_id,key,type,value,unit,reset_policy,effective_from,effective_to,created_bycustomers:id,name,plan_id,status,created_atcustomer_overrides:id,customer_id,key,type,value,unit,reset_policy,effective_from,effective_to,created_by
Les champs d'autorisation doivent être cohérents entre les tables. Utilisez une key stable comme seats, api_calls ou sso_enabled. Utilisez type pour simplifier l'évaluation (par exemple : flag, limit, quota). Stockez explicitement unit (comme users, requests, GB). Pour les quotas, gardez reset_policy non ambigu (par exemple monthly, daily, never).
Les overrides doivent se comporter comme une allowlist avec des dates. Si un client a un override actif sso_enabled=true, il doit primer sur la valeur du plan, mais seulement entre effective_from et effective_to. C'est ce qui permet de « donner 10 sièges supplémentaires pendant 14 jours » en une seule ligne qui expire automatiquement.
Comment l'évaluation des autorisations doit fonctionner
L'évaluation des autorisations est le petit morceau de code (ou service) qui répond à une seule question : « Est-ce que ce client est autorisé à faire ceci maintenant ? » Si cette partie est prévisible, tout le reste reste plus facile à exploiter.
Utilisez un ordre de priorité clair et ne vous en écartez pas : override client > valeur du plan > valeur par défaut système. Cela permet au support d'accorder des exceptions temporaires sans changer le plan, et donne à l'ingénierie des valeurs sûres quand rien n'est configuré.
Un flux d'évaluation pratique :
- Identifier le client/compte depuis la session authentifiée (pas depuis le corps de la requête).
- Charger le plan actif du client et les overrides actifs.
- Pour une
keydonnée, retourner l'override si présent ; sinon la valeur du plan ; sinon la valeur par défaut système. - Si la clé manque partout, échouer fermé pour les contrôles d'accès (traiter comme « non autorisé ») et utiliser une valeur par défaut sensée pour l'affichage UI.
- Si la clé est inconnue (pas dans votre registre), traiter comme une erreur de configuration, échouer fermé et journaliser pour suivi.
La mise en cache compte parce que les autorisations sont vérifiées constamment. Mettez en cache les autorisations résolues par client avec un TTL court et un numéro de version explicite. Invalidez quand l'une des choses suivantes change : affectation du plan, définition du plan, overrides client ou statut du client (essai, grâce, bloqué). Un pattern simple est « cache par customer_id + entitlements_version », où une édition par le support incrémente la version pour que les changements apparaissent rapidement.
La sécurité multi-tenant est non négociable. Chaque requête doit toujours filtrer par l'id du compte/client courant, et chaque entrée de cache doit être cléée par cet id. Ne cherchez pas les autorisations par email, domaine ou nom de plan seul.
Étape par étape : un workflow support-friendly pour ajuster l'accès
Un workflow orienté support garde le modèle flexible sans transformer chaque cas limite en tâche d'ingénierie. L'objectif est de faire des changements en toute sécurité, de laisser une trace et de confirmer l'expérience client.
Un flux sûr pour le support
Commencez par retrouver l'enregistrement client approprié et confirmez ce qu'il demande et pourquoi. « Besoin de deux sièges supplémentaires pour une semaine » est différent de « nous avons signé un avenant pour un niveau supérieur ». Une bonne UI admin facilite la visualisation en un seul endroit du plan actuel, du statut client et des overrides actifs.
Avant de changer quoi que ce soit, vérifiez l'utilisation réelle par rapport à la limite actuelle. Beaucoup de demandes disparaissent quand on constate que le compte n'est pas à la capacité ou que le problème vient d'ailleurs (par exemple, le tracking d'usage qui ne s'est pas mis à jour).
Quand vous devez ajuster l'accès, préférez un override explicite plutôt que d'éditer le plan. Gardez les overrides ciblés (un flag ou une limite), incluez un responsable et une raison, et mettez une date d'expiration par défaut. Les exceptions temporaires sont courantes, et elles sont faciles à oublier.
Une checklist simple dans votre outil admin suffit généralement :
- Confirmer l'identité du client, le plan actuel et la raison de la demande.
- Vérifier l'utilisation courante vs le plafond pertinent.
- Appliquer un override restreint et définir une date d'expiration.
- Ajouter des notes et un numéro de ticket ou référence de dossier.
- Vérifier le résultat dans l'UI produit en utilisant l'usurpation de session ou un compte de test.
Vérifiez toujours le changement comme le verra le client. Si vous supportez l'usurpation, indiquez clairement quand elle est activée et journalisez-la.
Montées en gamme, rétrogradations, essais et périodes de grâce
La plupart des problèmes d'autorisations surviennent lors des changements : un client monte en gamme en cours de cycle, une carte échoue ou un essai se termine un week-end. Si les règles sont vagues, le support devine et l'ingénierie est appelée.
Pour les montées en gamme, gardez la règle simple : l'accès doit généralement changer immédiatement, tandis que les détails financiers restent dans la facturation. Votre modèle d'autorisations doit écouter un événement de facturation comme « plan changé » et appliquer les nouveaux entitlements tout de suite. Si la facturation fait de la proratisation, tant mieux, mais n'intégrez pas la logique de prorata dans les autorisations.
Les rétrogradations sont là où les surprises arrivent. Choisissez un comportement clair et rendez-le visible pour le support :
- Période de grâce : conserver l'accès supérieur jusqu'à la fin de la période payée.
- Lecture seule : permettre la consultation/export mais bloquer les nouvelles écritures.
- Arrêt immédiat : bloquer la fonctionnalité immédiatement (réservé aux fonctionnalités à risque).
- Comportement hors-limite : autoriser l'utilisation mais bloquer la création une fois le quota dépassé.
- Rétention des données : conserver les données mais désactiver l'accès jusqu'à montée en gamme.
Les essais fonctionnent mieux comme un plan à part, pas comme un booléen sur le client. Donnez au plan d'essai des flags et limites explicites, plus une règle d'expiration automatique. À la fin de l'essai, déplacez le client vers un plan par défaut (souvent « Free ») et appliquez le comportement de rétrogradation que vous avez défini.
Les périodes de grâce sont aussi utiles en cas d'échec de paiement. Une courte fenêtre « impayé » (par ex. 3 à 7 jours) donne le temps de réparer le paiement sans perdre l'accès en plein travail. Traitez la période de grâce comme un override daté, pas comme un nom de plan personnalisé.
Un conseil pratique : ne liez pas les autorisations aux noms marketing des niveaux comme « Pro » ou « Enterprise ». Conservez des IDs internes stables (par ex. plan_basic_v2) pour pouvoir renommer les niveaux sans casser les règles.
Auditabilité et contrôles de sécurité
Si le support peut changer l'accès sans ingénierie, il faut une trace. Un bon modèle d'autorisations traite chaque changement comme une décision enregistrée, pas comme un ajustement silencieux.
Pour chaque override, capturez l'acteur, la raison métier et les horodatages. Si votre organisation le demande, ajoutez une étape d'approbation pour les changements sensibles.
Que consigner pour chaque changement
Gardez le log simple pour qu'il soit réellement utilisé :
created_byetcreated_atapproved_byetapproved_at(optionnel)reason(texte court comme « add-on payant » ou « crédit incident »)previous_valueetnew_valueexpires_at
Les contrôles de sécurité préviennent les accidents avant production. Mettez des garde-fous dans l'UI admin et en base : plafonnez les valeurs maximum, bloquez les nombres négatifs et exigez une date d'expiration lorsque le changement est important (par ex. multiplier les appels API par 10).
Restauration et préparation à l'audit
Le support fera des erreurs. Donnez-leur une action unique « revenir aux valeurs du plan » qui efface les overrides client et renvoie le compte aux valeurs du plan assigné.
Pour les audits, facilitez l'export historique par client et plage de dates. Un export CSV basique incluant raison et approbateur répond à la plupart des besoins sans impliquer l'ingénierie.
Exemple : un client « Pro » a besoin de 30 sièges supplémentaires pour une semaine d'événement. Le support définit seats_override=60 avec expires_at vendredi prochain, ajoute la raison « événement » et obtient l'approbation. Après expiration, le système revient automatiquement à 30, et la trace complète est disponible si la facturation conteste plus tard.
Erreurs fréquentes qui rendent les autorisations pénibles
La façon la plus rapide de casser un modèle d'autorisations est de le laisser grandir sans contrôle. Quelques raccourcis pris tôt peuvent se transformer en mois de tickets support et de « pourquoi ce client peut-il faire ça ? ».
Un problème fréquent est de disperser les vérifications de fonctionnalités partout. Si différentes parties de l'app décident de l'accès de façons différentes, vous aurez des contradictions. Centralisez l'évaluation des autorisations derrière une fonction ou un service unique, et faites en sorte que chaque UI et chaque appel API l'utilisent.
Un autre piège est de mélanger l'état de facturation avec l'accès. « Payé » n'est pas synonyme de « autorisé ». La facturation a des relances, des rétrofacturations, des essais et des factures qui se règlent plus tard. Séparez les événements de facturation et traduisez-les en autorisations avec des règles claires (y compris des périodes de grâce) pour que les cas limites n'éjectent pas les utilisateurs ou ne les laissent pas entrer indéfiniment.
Évitez de vous reposer sur une simple chaîne « tier » comme seule source de vérité. Les niveaux évoluent et les exceptions existent. Stockez des flags et limites explicites afin que le support puisse accorder une capacité sans accorder tout le plan par inadvertance.
Les overrides manuels sont nécessaires, mais des overrides illimités sans garde-fous deviennent une dette invisible. Exigez un responsable, une raison et une référence de ticket. Favorisez des dates d'expiration ou de revue. Gardez les overrides ciblés (une clé à la fois) et faciles à auditer.
Les quotas tournent mal quand les règles de réinitialisation sont vagues. Définissez ce que « par mois » signifie (mois calendaire vs 30 jours glissants), ce qui se passe lors d'une montée en gamme et si le quota inutilisé est reporté. Faites respecter ces règles en backend, pas seulement dans l'UI, pour éviter des comportements incohérents entre web et mobile.
Checklist rapide avant le déploiement
Avant de déployer un modèle d'autorisations, faites une passe finale avec ceux qui l'utiliseront au quotidien : support, customer success et la personne en astreinte.
Assurez-vous que chaque fonctionnalité correspond à une clé d'autorisation stable avec un propriétaire clair. Évitez les doublons comme reports_enabled vs reporting_enabled. Assurez-vous que chaque plan a des valeurs par défaut explicites pour les clés que vous livrez. Si une clé manque, échouez en sécurité (généralement refuser l'accès) et alertez en interne pour correction.
Pour l'exploitation, vérifiez que le workflow est réellement utilisable :
- Le support peut voir l'accès effectif (valeur du plan plus override) sans écrire de SQL.
- Les overrides sont journalisés avec qui a changé quoi, pourquoi et quand cela expire.
- Les quotas ont une règle de réinitialisation visible et un moyen clair d'afficher l'utilisation courante.
Un test de réalité : demandez au support d'accorder un add-on de 14 jours à un client, puis de le retirer. S'ils peuvent le faire en toute confiance en moins de deux minutes, vous êtes proche du but.
Scénario d'exemple : niveaux avec une exception temporaire
Imaginez trois niveaux, chacun définissant quelques autorisations claires qui apparaissent dans le produit et sont appliquées côté backend.
- Free : 1 projet, 3 utilisateurs, 200 exports/mois, limite API basique, logs d'audit 7 jours.
- Team : 10 projets, 25 utilisateurs, 2 000 exports/mois, limite API supérieure, logs d'audit 30 jours.
- Business : projets illimités, 200 utilisateurs, 10 000 exports/mois, limite API maximale, logs d'audit 180 jours, SSO activé.
Maintenant un client Team dit : « Nous devons faire 8 000 exports ce mois-ci pour la clôture. Pouvez-vous nous aider pendant 30 jours ? » C'est précisément le cas où un override temporaire vaut mieux que de les monter de niveau.
Le support ouvre le dossier client, ajoute un override export_monthly_limit = 8000 et fixe expires_at à 30 jours à partir d'aujourd'hui. Ils notent : « Approuvé par Alex (Sales), exception 30 jours pour reporting Q4. »
Côté client, deux choses doivent se produire :
- L'UI reflète la nouvelle limite (le mètre d'utilisation et l'étiquette « Exports restants » se mettent à jour).
- Les exports fonctionnent jusqu'à atteindre 8 000 pour le mois.
S'ils dépassent, un message clair apparaît : « Limite d'export atteinte (8 000/mois). Contactez le support ou montez en gamme pour augmenter la limite. »
Après la date d'expiration, l'override cesse et le client revient automatiquement à la limite Team sans action manuelle.
Prochaines étapes : implémentez et itérez sans ralentir le support
Commencez par transformer les « fonctionnalités » en un petit catalogue d'autorisations. Donnez à chaque élément une clé claire, un type (flag vs limit vs quota) et une valeur par défaut par plan. Ce catalogue devient un langage partagé entre produit, support et ingénierie, donc gardez les noms précis et stables.
Décidez où se fait l'application : une règle sûre est d'appliquer dans l'API tout ce qui modifie des données ou a un coût, d'utiliser des jobs en arrière-plan pour stopper des travaux longs quand les limites sont dépassées, et de considérer l'UI comme un guide (boutons désactivés, messages utiles) mais pas comme le seul verrou.
Gardez la première version restreinte. Concentrez-vous sur les autorisations qui génèrent le plus de questions, ajoutez des vérifications sur les actions les plus à risque et publiez une vue admin montrant client, plan, overrides et historique en un seul endroit.
Si vous voulez construire rapidement le panneau admin et la logique sous-jacente sans tout coder à la main, AppMaster (appmaster.io) est une solution pratique pour ce type de travail : vous pouvez modéliser plans et overrides comme des données, implémenter des vérifications comme processus métiers et livrer une UI support cohérente entre backend et apps.
FAQ
Un modèle d'autorisations est une méthode unique et cohérente pour décider ce qu'un client peut faire maintenant, en se basant sur son plan et sur d'éventuelles exceptions approuvées. Il évite les situations « ça marche dans l'UI mais échoue dans l'API » en faisant en sorte que toutes les parties du produit lisent les mêmes règles.
Sans système clair, le support finit par demander des interventions d'ingénierie pour de petits ajustements d'accès, et les clients voient des comportements incohérents entre écrans et endpoints. Au fil du temps, les règles se dispersent dans le code, des cases d'administration, des tableurs et des mises à jour ponctuelles en base, ce qui augmente le risque d'incidents et de litiges de facturation.
La facturation répond à « que devons-nous facturer et quand ? », tandis que les autorisations répondent à « qu'est-ce qui est autorisé maintenant ? ». Les séparer permet à la finance de corriger des factures ou des relances sans modifier involontairement l'accès au produit.
Utilisez un flag quand une capacité doit être complètement activée ou désactivée, comme SSO. Utilisez une limite pour une capacité qui ne se réinitialise pas, par exemple le nombre maximal de sièges ou de projets. Utilisez un quota pour une consommation dans le temps, comme les exports par mois, et précisez clairement la règle de réinitialisation.
Choisissez le périmètre qui correspond à la façon dont vous vendez et appliquez : niveau/compte pour des éléments comme le SSO, workspace pour des ressources partagées comme les projets, et utilisateur pour des permissions ou des add-ons liés à une personne. L'important est d'utiliser le même périmètre partout où l'on vérifie l'autorisation.
Un ordre de priorité courant est : override client > valeur du plan > valeur par défaut système. Si la clé est manquante ou inconnue, refuser l'accès pour les vérifications d'exécution et consigner l'erreur de configuration pour correction plutôt que de laisser passer l'accès.
Stockez les valeurs par défaut des plans dans une table et les exceptions client dans une autre en utilisant les mêmes clés et types stables. Rendez les overrides datés (début/fin) pour que le support puisse accorder un accès temporaire qui expirera automatiquement.
Mettez en cache les autorisations résolues par client avec un TTL court et un numéro de version. Quand le support modifie l'affectation de plan ou un override, incrémentez la version pour que la mise à jour apparaisse rapidement sans attendre l'expiration du cache.
Créez un override ciblé avec une date d'expiration et une raison claire, puis vérifiez le résultat en consultant le produit comme le ferait le client. Évitez d'éditer le plan pour une demande unique, car cela modifie l'accès pour tous les comptes du niveau et complique l'audit.
Enregistrez qui a fait le changement, quand, pourquoi, quelle était la valeur précédente, quelle est la nouvelle valeur, et quand cela expire. Ajoutez une action « revenir aux valeurs du plan » pour annuler rapidement les erreurs sans nettoyage manuel.


