Organisations B2B Multi-Tenant
Le système Organizations active la multi-tenancy B2B dans Auris. Chaque organisation représente une entité cliente — une entreprise, une équipe ou tout regroupement logique — qui possède un ensemble d’utilisateurs membres, a ses propres assignations de rôles et peut configurer son propre fournisseur SSO enterprise. Les organisations sont indépendantes les unes des autres : le rôle d’un utilisateur dans l’Organisation A n’a aucune influence sur son accès dans l’Organisation B.
Ce modèle est conçu pour les produits SaaS qui vendent aux entreprises : ton seul tenant Auris héberge plusieurs organisations clientes, chacune avec une gestion des membres et un contrôle d’accès isolés.
Concepts de Base
Organisation : Une entité avec un nom et un slug unique. Les organisations ont des métadonnées, un nom d’affichage et des paramètres. Elles appartiennent toujours à exactement un utilisateur (l’OWNER).
Membre de l’Organisation : Un utilisateur qui appartient à une organisation avec l’un des quatre rôles : OWNER, ADMIN, MEMBER ou VIEWER.
Invitation : Une invitation basée sur un token avec expiration temporelle qui permet à un utilisateur (ou une adresse e-mail pas encore enregistrée) de rejoindre une organisation avec un rôle spécifié.
SSO par Organisation : Chaque organisation peut configurer son propre fournisseur d’identité SAML 2.0 ou OIDC. Quand un utilisateur se connecte avec une e-mail correspondant à un domaine vérifié, Auris le redirige automatiquement vers l’IdP de son organisation. Voir Enterprise SSO.
Création des Organisations
Les organisations peuvent être créées par tout utilisateur avec la permission appropriée, ou programmatiquement via le SDK de Management.
/api/organizationsRequires: manage:organizationsCrée une nouvelle organisation. L’utilisateur qui la crée est automatiquement assigné au rôle OWNER.
Corps de la requête :
{
"name": "Acme Corporation",
"displayName": "Acme Corp",
"slug": "acme-corp",
"metadata": {
"plan": "enterprise",
"contractId": "CNT-2025-0042"
}
}Référence des champs :
| Champ | Type | Obligatoire | Notes |
|---|---|---|---|
name | string | ✅ | Nom interne, unique par tenant |
displayName | string | Non | Nom affiché dans l’interface utilisateur |
slug | string | Non | Identifiant URL-safe, généré automatiquement depuis name si omis |
metadata | object | Non | JSON arbitraire pour les données spécifiques à l’application |
/api/organizationsRequires: view:organizationsRetourne une liste paginée de toutes les organisations du tenant. Supporte les paramètres de requête search et page/limit.
/api/organizations/[id]Requires: view:organizationsRetourne l’enregistrement de l’organisation incluant le compteur de membres et les paramètres de base.
/api/organizations/[id]Requires: manage:organizationsMet à jour les champs de l’organisation. Tous les champs sont optionnels — seuls les champs fournis sont mis à jour.
/api/organizations/[id]Requires: manage:organizationsSupprime l’organisation. Les membres perdent les assignations de rôle au niveau organisation. Les comptes utilisateur Auris sous-jacents ne sont pas modifiés.
Rôles des Membres
Les organisations utilisent un système de rôles hiérarchiques à quatre niveaux. Les rôles plus élevés héritent de toutes les capacités des rôles inférieurs.
| Rôle | Capacités |
|---|---|
| OWNER | Contrôle total. Peut gérer tous les paramètres, membres, SSO et facturation. Il y a toujours exactement un OWNER. L’OWNER ne peut pas être retiré par un autre OWNER — la propriété doit être transférée d’abord. |
| ADMIN | Peut gérer les membres (ajouter, retirer, changer les rôles jusqu’à ADMIN). Peut configurer le SSO et les paramètres de l’organisation. Ne peut pas supprimer l’organisation. |
| MEMBER | Accès standard. Les attributions de rôles sont définies par l’application — Auris n’impose pas de restrictions sur les ressources à ce niveau au-delà de ce que ton application applique. |
| VIEWER | Accès en lecture seule. Peut voir les membres et les paramètres de l’organisation mais ne peut pas apporter de modifications. |
Auris applique la hiérarchie des rôles au niveau API. Un ADMIN ne peut pas assigner le rôle OWNER à un autre utilisateur — le transfert de propriété nécessite un appel API séparé de la part de l’OWNER courant.
Gestion des Membres
/api/organizations/[id]/membersRequires: view:organizationsRetourne la liste paginée des membres de l’organisation, incluant les détails de l’utilisateur et son rôle dans l’organisation.
Réponse :
{
"data": [
{
"userId": "usr_01HX...",
"email": "[email protected]",
"firstName": "Alice",
"lastName": "Martin",
"role": "ADMIN",
"joinedAt": "2025-01-15T10:00:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 12, "totalPages": 1 }
}/api/organizations/[id]/membersRequires: manage:organizationsAjoute directement un utilisateur (via userId) à l’organisation avec un rôle spécifié. L’utilisateur doit déjà exister dans Auris.
{
"userId": "usr_01HX...",
"role": "MEMBER"
}/api/organizations/[id]/members/[userId]Requires: manage:organizationsMet à jour le rôle du membre dans l’organisation.
/api/organizations/[id]/members/[userId]Requires: manage:organizationsRetire l’utilisateur de l’organisation. Le compte Auris de l’utilisateur n’est pas supprimé ni désactivé.
Invitations
Les invitations permettent d’ajouter des utilisateurs à une organisation via e-mail, même s’ils n’ont pas encore de compte Auris. Le flux d’invitation :
- Un ADMIN ou OWNER envoie une invitation à une adresse e-mail.
- Auris génère un token unique avec expiration et envoie un e-mail avec un lien d’acceptation.
- L’invité clique le lien. S’il a déjà un compte Auris, il est ajouté immédiatement à l’organisation. Sinon, il est invité à créer un compte, après quoi l’invitation est acceptée.
- Les invitations expirent après 7 jours si elles ne sont pas acceptées.
/api/organizations/[id]/invitationsRequires: manage:organizationsCrée et envoie une invitation à une adresse e-mail.
{
"email": "[email protected]",
"role": "MEMBER",
"message": "Tu as été invité à rejoindre Acme Corp sur notre plateforme."
}/api/organizations/[id]/invitationsRequires: manage:organizationsListe toutes les invitations en attente, acceptées et expirées pour l’organisation.
/api/organizations/[id]/invitations/[invitationId]Requires: manage:organizationsAnnule une invitation en attente. Les invitations expirées ne peuvent pas être acceptées mais n’ont pas besoin d’être annulées manuellement.
États des invitations :
| État | Signification |
|---|---|
PENDING | Envoyée et en attente d’acceptation |
ACCEPTED | L’utilisateur a accepté et est maintenant membre |
EXPIRED | La période de 7 jours est passée sans acceptation |
CANCELLED | Annulée manuellement par un ADMIN ou OWNER |
Utilisation avec le SDK
React
import { useOrganization } from '@auris/react'
function OrgDashboard() {
// Retourne le contexte de l'organisation depuis la session de l'utilisateur authentifié.
// L'organisation est dérivée des claims du token d'accès.
const { organization, members, isLoading } = useOrganization()
if (isLoading) return <div>Chargement...</div>
if (!organization) return <div>Aucune organisation</div>
return (
<div>
<h1>{organization.displayName}</h1>
<p>Membres : {members.length}</p>
<ul>
{members.map((member) => (
<li key={member.userId}>
{member.email} — {member.role}
</li>
))}
</ul>
</div>
)
}Métadonnées de l’Organisation
Comme les utilisateurs, les organisations supportent des métadonnées JSON arbitraires. Utilise-les pour stocker des données spécifiques à l’application avec l’enregistrement de l’organisation sans migrations de schéma.
{
"metadata": {
"plan": "enterprise",
"contractId": "CNT-2025-0042",
"maxSeats": 250,
"billingEmail": "[email protected]",
"features": ["advanced-analytics", "custom-domains", "audit-export"]
}
}Les métadonnées sont retournées dans chaque réponse API d’organisation et accessibles dans le SDK de Management.
Cas d’Usage
Multi-tenancy SaaS : Chacun de tes clients est une organisation. Ton application lit l’organisation de l’utilisateur depuis son JWT ou sa session et limite toutes les requêtes aux données de cette organisation. Les nouveaux clients sont onboardés en créant une organisation et en invitant leur administrateur.
Onboarding clients enterprise : Crée l’organisation, ajoute l’administrateur IT du client comme OWNER et laisse-le gérer ses propres utilisateurs et configurer son propre SSO d’entreprise. Ton équipe maintient la visibilité au niveau tenant via la Console Admin.
Solutions white-label : Chaque organisation cliente peut configurer son propre SSO, la vérification de domaine et le nom d’affichage. La page Hosted Login s’adapte au branding par organisation quand l’e-mail d’un utilisateur correspond à un domaine vérifié.
Équipes de produit internes : Sépare les lignes de produits ou business units en organisations distinctes pour une gestion isolée des rôles, sans maintenir des instances tenant Auris séparées.
Permissions Requises
| Opération | Permission |
|---|---|
| Voir / obtenir des organisations | view:organizations |
| Créer / mettre à jour / supprimer des organisations | manage:organizations |
| Gérer les membres | manage:organizations |
| Envoyer / annuler des invitations | manage:organizations |
Pages Associées
- Enterprise SSO par Organisation — Configurer SSO SAML 2.0 ou OIDC pour des organisations individuelles
- Provisioning SCIM 2.0 — Automatiser la synchronisation des membres depuis un IdP externe
- Rôles et Permissions — RBAC au niveau tenant qui complète les rôles d’organisation
- Console : Organisations — Guide complet de la Console