Aller au contenu principal

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_TOKEN utilisateur pour Authorization
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

MethodeEndpointUsageRole
POST/invite-userInviter un utilisateurAdmin/Manager
POST/admin-usersLister, modifier, supprimerAdmin/Manager
GET/helloTest du runtimePublic (healthcheck)

Inviter un utilisateur

  1. Prepare le payload JSON
  2. Envoie la requete
  3. 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:

  • email est normalise (trim + lowercase) et mappe dans public.access.
  • role=Client exige clientId (sinon 400).
  • 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 Client sans client_id associe dans access: refuse (400).
  • Si role passe a Client, synchronisation du lien client_users.
  • Si role sort de Client, suppression du lien client_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 avec clientId).
  • Invitation interne (Technicien, Manager, Admin): Referentiels > Acces.