API admin ERP (Edge Functions)
Ce guide pas a pas explique comment inviter et administrer les acces via les Edge Functions.
Les autorisations sont centralisees dans public.access.
Base URL
https://supabase.oben-services.com/functions/v1
Avant de commencer
- Etre connecte avec un compte Admin ou Manager
- Recuperer une cle ANON pour
apikey - Recuperer un
ACCESS_TOKENutilisateur pourAuthorization
Securite
Ne jamais exposer la SERVICE_ROLE_KEY dans un navigateur.
Authentification
Headers a fournir:
- Authorization: Bearer
<ACCESS_TOKEN> - apikey:
<ANON_KEY> - Content-Type: application/json
CORS et domaines autorises
Les fonctions verifient l origine via ALLOWED_ORIGINS.
- Exemple:
https://oben-services.com,https://www.oben-services.com
Endpoints disponibles
| Methode | Endpoint | Usage | Role |
|---|---|---|---|
| POST | /invite-user | Inviter un utilisateur | Admin/Manager |
| POST | /admin-users | Lister, modifier, supprimer | Admin/Manager |
| GET | /hello | Test du runtime | Public (healthcheck) |
Inviter un utilisateur
- Prepare le payload JSON
- Envoie la requete
- Verifie la reponse
Payload:
{ "email": "user@exemple.com", "role": "Technicien", "redirectTo": "https://oben-services.com" }
Option (portail Client):
{ "email": "client@exemple.com", "role": "Client", "clientId": "<id-client>", "redirectTo": "https://oben-services.com" }
Regles:
emailest normalise (trim + lowercase) et mappe danspublic.access.role=ClientexigeclientId(sinon400).- Un Manager ne peut pas inviter
Admin. - En cas d echec partiel, l invitation est rollback (suppression user + restauration access).
Exemple curl:
ANON_KEY="..."
ACCESS_TOKEN="..."
curl -i https://supabase.oben-services.com/functions/v1/invite-user \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "apikey: $ANON_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"user@exemple.com","role":"Technicien","redirectTo":"https://oben-services.com"}'
Gerer les utilisateurs (admin-users)
Action list
{ "action": "list", "page": 1, "perPage": 200 }
Retour (extrait):
{
"users": [
{
"id": "<user-id>",
"email": "user@exemple.com",
"role": "Technicien",
"clientId": null,
"employeeId": "emp-1",
"disabled": false
}
]
}
Action set_role
{ "action": "set_role", "userId": "<id>", "role": "Admin" }
Regles:
- Manager -> Admin: refuse (
403). - Manager -> modification compte Admin: refuse (
403). - Passage vers
Clientsansclient_idassocie dansaccess: refuse (400). - Si role passe a
Client, synchronisation du lienclient_users. - Si role sort de
Client, suppression du lienclient_users.
Action set_disabled
{ "action": "set_disabled", "userId": "<id>", "disabled": true }
Action generate_recovery
{ "action": "generate_recovery", "userId": "<id>", "redirectTo": "https://oben-services.com" }
Action delete
{ "action": "delete", "userId": "<id>" }
Reponses
- list:
{ "users": [...] } - set_role:
{ "userId": "<id>", "role": "Admin", "clientId": "<id|null>" } - set_disabled:
{ "userId": "<id>", "disabled": true, "disabledUntil": "<iso|null>" } - delete:
{ "userId": "<id>", "deleted": true } - generate_recovery:
{ "userId": "<id>", "sent": true }
Endpoint de test
GET /hello sert a verifier que le runtime Edge Functions demarre.
curl -i https://supabase.oben-services.com/functions/v1/hello \
-H "Content-Type: application/json"
Bonnes pratiques UI
- Invitation
Client: utiliser Referentiels > Clients (workflow avecclientId). - Invitation interne (
Technicien,Manager,Admin): Referentiels > Acces.