Module utilisateur
Description des fonctionnalités
Le préfixe de l'interface est uniformément http(s)://<your-domain>
HTTPS doit être utilisé dans les environnements de production pour sécuriser les jetons d'authentification. HTTP n'est recommandé que pour les environnements de développement.
Le système de gestion des utilisateurs principal implémente une structure d'autorisation à quatre niveaux (Public/Utilisateur/Administrateur/Root) et une gestion complète du cycle de vie des utilisateurs. Il comprend des fonctionnalités telles que l'inscription/la connexion, le profil personnel, la gestion des jetons, la recharge/le paiement et un système d'affiliation. Il prend en charge 2FA, la vérification des e-mails et diverses méthodes de connexion OAuth.
Enregistrement/Connexion au compte
🔐 Aucune authentification requise
Créer un nouveau compte
- Nom de l'interface:Enregistrer un nouveau compte
- Méthode HTTP:POST
- Chemin:
/api/user/register - Exigence d'authentification:Public
- Description de la fonction:Crée un nouveau compte utilisateur, prenant en charge la fonctionnalité de vérification des e-mails et de code de référence
💡 Exemple de demande:
const response = await fetch('/api/user/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: "newuser",
password: "password123",
email: "user@example.com",
verification_code: "123456",
aff_code: "INVITE123"
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "User registration successful"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "The administrator has closed new user registration"
}🧾 Description du champ:
username(String) : Nom d'utilisateur, obligatoirepassword(String) : Mot de passe, obligatoireemail(String): adresse e-mail, requise lorsque la vérification de l'e-mail est activéeverification_code(Chaîne): Code de vérification de l'e-mail, requis lorsque la vérification de l'e-mail est activéeaff_code(String) : Code de parrainage, facultatif
Connexion utilisateur
- Nom de l'interface:Connexion utilisateur
- Méthode HTTP:POST
- Chemin:
/api/user/login - Exigence d'authentification:Public
- Description de la fonction:Connexion au compte utilisateur, prenant en charge l'authentification à deux facteurs (2FA)
💡 Exemple de demande:
const response = await fetch('/api/user/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: "testuser",
password: "password123"
})
});
const data = await response.json();✅ Exemple de réponse réussie (No 2FA):
{
"success": true,
"message": "Login successful",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "testuser",
"role": 1,
"quota": 1000000
}
}
}✅ Exemple de réponse réussie (2FA requis):
{
"success": true,
"message": "Please enter the two-step verification code",
"data": {
"require_2fa": true
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "The administrator has turned off password login"
}🧾 Description du champ:
username(String) : Nom d'utilisateur, obligatoirepassword(String) : Mot de passe, obligatoirerequire_2fa(booléen): indique si une authentification à deux facteurs est requise
Notification de paiement Epay
- Nom de l'interface : Notification de paiement Epay
- Méthode HTTP:GET
- Chemin:
/api/user/epay/notify - Exigence d'authentification:Public
- Description de la fonction : Gère les notifications de rappel de paiement du système Epay
💡 Exemple de demande:
_// Usually called back automatically by the payment system,The front end does not need to actively call _
_// ExampleURL: /api/user/epay/notify?trade_no=USR1NO123456&money=10.00&trade_status=TRADE_SUCCESS_✅ Exemple de réponse réussie:
{
"success": true,
"message": "Payment successful"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "The order does not exist or has been processed"
}🧾 Description du champ:
trade_no(String) : Numéro d'ordre de la transactionmoney(String) : Montant du paiementtrade_status(String) : Statut de la transactionsign(String): Vérification de la signature
Répertorier tous les groupes (version non authentifiée)
- Nom de l'interface:Liste de tous les groupes
- Méthode HTTP:GET
- Chemin:
/api/user/groups - Exigence d'authentification:Public
- Description de la fonction:Récupère des informations sur tous les groupes d'utilisateurs du système, accessibles sans connexion
💡 Exemple de demande:
const response = await fetch('/api/user/groups', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": {
"default": {
"ratio": 1.0,
"desc": "Default grouping"
},
"vip": {
"ratio": 0.8,
"desc": "VIPGroup"
},
"auto": {
"ratio": "automatic",
"desc": "Automatically select the best grouping"
}
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to obtain group information"
}🧾 Description du champ:
data (Objet): Mappage des informations de groupe
- Clé (Chaîne): Nom du groupe
ratio(Nombre/Chaîne): Rapport de groupe, "automatique" (auto) signifie sélection automatiquedesc(String) : Description du groupe
🔐 Authentification utilisateur requise
Déconnexion
- Nom de l'interface:Déconnexion
- Méthode HTTP:GET
- Chemin:
/api/user/logout - Exigence d'authentification:Utilisateur
- Description de la fonction:Efface la session utilisateur et se déconnecte
💡 Exemple de demande:
const response = await fetch('/api/user/logout', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": ""
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Session clear failed"
}🧾 Description du champ:
Aucun paramètre de requête
Opérations utilisateur en libre-service
🔐 Authentification utilisateur requise
Obtenir les groupes d'utilisateurs actuels
- Nom de l'interface:Obtenir les groupes d'utilisateurs actuels
- Méthode HTTP:GET
- Chemin:
/api/user/self/groups - Exigence d'authentification:Utilisateur
- Description de la fonction : Récupère les informations de groupe disponibles pour l'utilisateur actuellement connecté, y compris le rapport et la description du groupe
💡 Exemple de demande:
const response = await fetch('/api/user/self/groups', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": {
"default": {
"ratio": 1.0,
"desc": "Default grouping"
},
"vip": {
"ratio": 0.8,
"desc": "VIPGroup"
},
"auto": {
"ratio": "automatic",
"desc": "Automatically select the best grouping"
}
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to obtain group information"
}🧾 Description du champ:
data (Objet): Mappage des informations de groupe disponibles pour l'utilisateur group.go:25-48
- Clé (Chaîne): Nom du groupe
ratio(Nombre/Chaîne): Rapport de groupe, "automatique" (auto) signifie sélectionner automatiquement le groupe optimaldesc(String) : Description du groupe
Obtenir un profil personnel
- Nom de l'interface:Obtenir un profil personnel
- Méthode HTTP:GET
- Chemin:
/api/user/self - Exigence d'authentification:Utilisateur
- Description de la fonction:Récupère les informations détaillées de l'utilisateur actuel, y compris les autorisations, le quota, les paramètres, etc.
💡 Exemple de demande:
const response = await fetch('/api/user/self', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": {
"id": 1,
"username": "testuser",
"display_name": "Test User",
"role": 1,
"status": 1,
"email": "user@example.com",
"group": "default",
"quota": 1000000,
"used_quota": 50000,
"request_count": 100,
"aff_code": "ABC123",
"aff_count": 5,
"aff_quota": 10000,
"aff_history_quota": 50000,
"inviter_id": 0,
"linux_do_id": "",
"setting": "{}",
"stripe_customer": "",
"sidebar_modules": "{\"chat\":{\"enabled\":true}}",
"permissions": {
"can_view_logs": true,
"can_manage_tokens": true
}
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to obtain user information"
}🧾 Description du champ:
id(Numéro): ID utilisateurusername(Chaîne) : Nom d'utilisateurdisplay_name(Chaîne): Nom d'affichagerole(Numéro): Rôle utilisateur, 1=Utilisateur normal, 10=Administrateur, 100=Utilisateur racinestatus(Numéro) : Statut utilisateur, 1=Normal, 2=Désactivéemail(Chaîne): Adresse e-mailgroup(Chaîne): Groupe attribuéquota(Nombre): Quota totalused_quota(Nombre): Quota utilisérequest_count(Nombre): nombre de demandesaff_code(Chaîne): Code d'affiliationaff_count(Nombre): Nombre d'affiliésaff_quota(Nombre): Quota de récompense d'affiliationaff_history_quota(Nombre): Quota d'affiliation historiqueinviter_id(Numéro): ID de l'invitélinux_do_id(Chaîne): ID de compte LinuxDosetting(String): chaîne JSON des paramètres utilisateurstripe_customer(Chaîne): ID client Stripesidebar_modules(String): chaîne JSON de configuration du module de la barre latéralepermissions(Objet): informations sur les autorisations de l'utilisateur
Obtenez la visibilité du modèle
- Nom de l'interface:Obtenir la visibilité du modèle
- Méthode HTTP:GET
- Chemin:
/api/user/models - Exigence d'authentification:Utilisateur
- Description de la fonction:Récupère la liste des modèles d'IA accessibles à l'utilisateur actuel
💡 Exemple de demande:
const response = await fetch('/api/user/models', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": [
"gpt-3.5-turbo",
"gpt-4",
"claude-3-sonnet",
"claude-3-haiku"
]
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to get model list"
}🧾 Description du champ:
data (Array): Liste des noms de modèles accessibles à l'utilisateur
Modifier le profil personnel
- Nom de l'interface:Modifier le profil personnel
- Méthode HTTP:PUT
- Chemin:
/api/user/self - Exigence d'authentification:Utilisateur
- Description de la fonction: met à jour les informations personnelles de l'utilisateur ou les paramètres de la barre latérale
💡 Exemple de demande (mettre à jour les informations personnelles):
const response = await fetch('/api/user/self', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
display_name: "New Display Name",
email: "newemail@example.com"
})
});
const data = await response.json();💡 Exemple de demande (mettre à jour les paramètres de la barre latérale):
const response = await fetch('/api/user/self', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
sidebar_modules: JSON.stringify({
chat: { enabled: true, playground: true },
console: { enabled: true, token: true }
})
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "Update successful"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Input is illegal"
}🧾 Description du champ:
display_name(String): Nom d'affichage, facultatifemail(String): Adresse e-mail, facultatifpassword(String) : Nouveau mot de passe, facultatifsidebar_modules(String) : chaîne JSON de configuration du module Sidebar, en option
Supprimer le compte
- Nom de l'interface:Supprimer le compte
- Méthode HTTP:DELETE
- Chemin:
/api/user/self - Exigence d'authentification:Utilisateur
- Description de la fonction:Supprime le compte utilisateur actuel. Les utilisateurs root ne peuvent pas être supprimés
💡 Exemple de demande:
const response = await fetch('/api/user/self', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": ""
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Cannot delete super administrator account"
}🧾 Description du champ:
Aucun paramètre de requête
Générer un jeton d'accès au niveau de l'utilisateur
- Nom de l'interface:Générer un jeton d'accès au niveau de l'utilisateur
- Méthode HTTP:GET
- Chemin:
/api/user/token - Exigence d'authentification:Utilisateur
- Description de la fonction:Génère un nouveau jeton d'accès pour l'utilisateur actuel, utilisé pour les appels API
💡 Exemple de demande:
const response = await fetch('/api/user/token', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": "`<YOUR_API_KEY>`"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to generate token"
}🧾 Description du champ:
data (String): Jeton d'accès généré
Obtenez des informations sur le code d'affiliation
- Nom de l'interface:Obtenir des informations sur le code d'affiliation
- Méthode HTTP:GET
- Chemin:
/api/user/aff - Exigence d'authentification:Utilisateur
- Description de la fonction:Récupère ou génère le code d'affiliation de l'utilisateur, utilisé pour inviter de nouveaux utilisateurs à s'inscrire
💡 Exemple de demande:
const response = await fetch('/api/user/aff', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": "ABC123"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to obtain promotion code"
}🧾 Description du champ:
data (String): Le code d'affiliation de l'utilisateur. Si elle n'existe pas, une chaîne aléatoire de 4 caractères sera automatiquement générée
Rechargement direct du quota
- Nom de l'interface:Rechargement direct du quota
- Méthode HTTP:POST
- Chemin:
/api/user/topup - Exigence d'authentification:Utilisateur
- Description de la fonction:Utilise un code de remboursement pour recharger le quota du compte
💡 Exemple de demande:
const response = await fetch('/api/user/topup', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
key: "REDEEM123456"
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "Redemption successful",
"data": 100000
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "The redemption code is invalid or has been used"
}🧾 Description du champ:
key(Chaîne): Code de remboursement, obligatoiredata(Nombre): renvoie le montant du quota échangé en cas de succès
Soumettre l'ordre de paiement
- Nom de l'interface:Soumettre l'ordre de paiement
- Méthode HTTP:POST
- Chemin:
/api/user/pay - Exigence d'authentification:Utilisateur
- Description de la fonction:Crée un ordre de paiement en ligne, prenant en charge plusieurs méthodes de paiement
💡 Exemple de demande:
const response = await fetch('/api/user/pay', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
amount: 10000,
payment_method: "alipay",
top_up_code: ""
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "success",
"data": {
"pid": "12345",
"type": "alipay",
"out_trade_no": "USR1NO123456",
"notify_url": "https://example.com/notify",
"return_url": "https://example.com/return",
"name": "TUC10000",
"money": "10.00",
"sign": "abc123def456"
},
"url": "https://pay.example.com/submit"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "The recharge amount cannot be less than 1000"
}🧾 Description du champ:
amount(Nombre): Montant de la recharge, doit être supérieur ou égal au quota de recharge minimum topup.go:133-136payment_method(String) : Mode de paiement, tel que « alipay », « wxpay », etc.top_up_code(String) : Code de recharge, facultatifdata(Objet) : Paramètres du formulaire de paiementurl(String): URL de soumission du paiement
Calculer le montant du paiement
- Nom de l'interface:Calculer le montant du paiement
- Méthode HTTP:POST
- Chemin:
/api/user/amount - Exigence d'authentification:Utilisateur
- Description de la fonction:Calcule le montant réel du paiement correspondant au quota de recharge spécifié
💡 Exemple de demande:
const response = await fetch('/api/user/amount', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
amount: 10000,
top_up_code: ""
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "success",
"data": "10.00"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "The recharge amount cannot be less than 1000"
}🧾 Description du champ:
amount(Nombre): Montant de recharge, doit être supérieur ou égal au Quota de recharge minimumtop_up_code(String) : Code de recharge, facultatifdata(String) : Montant réel requis pour le paiement (Yuan)
Transfert de quota d'affiliation
- Nom de l'interface:Transfert de quota d'affiliation
- Méthode HTTP:POST
- Chemin:
/api/user/aff_transfer - Exigence d'authentification:Utilisateur
- Description de la fonction:Convertit le quota de récompense d'affiliation en quota utilisable
💡 Exemple de demande:
const response = await fetch('/api/user/aff_transfer', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
quota: 50000
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "Transfer successful"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Insufficient invitation quota!"
}🧾 Description du champ:
quota (Nombre): Le montant de Quota à convertir doit être supérieur ou égal au Quota unitaire minimum
Mettre à jour les paramètres utilisateur
- Nom de l'interface:Mettre à jour les paramètres utilisateur
- Méthode HTTP:PUT
- Chemin:
/api/user/setting - Exigence d'authentification:Utilisateur
- Description de la fonction: met à jour la configuration des paramètres personnels de l'utilisateur
💡 Exemple de demande:
const response = await fetch('/api/user/setting', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
theme: "dark",
language: "zh-CN",
notifications: {
email: true,
browser: false
}
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "Settings updated successfully"
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Setting format error"
}🧾 Description du champ:
- Le corps de la demande peut contenir n'importe quel champ de paramètre utilisateur, soumis au format JSON
- Les champs spécifiques dépendent des exigences de la page des paramètres du frontend
Gestion des utilisateurs administrateurs
🔐 Authentification administrateur requise
Obtenir la liste de tous les utilisateurs
- Nom de l'interface:Obtenir la liste de tous les utilisateurs
- Méthode HTTP:GET
- Chemin:
/api/user/ - Exigence d'authentification:Administrateur
- Description de la fonction : Pagine et récupère les informations de liste de tous les utilisateurs du système
💡 Exemple de demande:
const response = await fetch('/api/user/?p=1&page_size=20', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": 1,
"username": "testuser",
"display_name": "Test User",
"role": 1,
"status": 1,
"email": "user@example.com",
"group": "default",
"quota": 1000000,
"used_quota": 50000,
"request_count": 100
}
],
"total": 50,
"page": 1,
"page_size": 20
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Failed to get user list"
}🧾 Description du champ:
p(Numéro): Numéro de page, par défaut 1page_size(Nombre) : éléments par page, par défaut 20items(Array) : liste d'informations utilisateurtotal(Nombre) : Nombre total d'utilisateurspage(Numéro): Numéro de la page actuellepage_size(Nombre) : Articles par page
Rechercher des utilisateurs
- Nom de l'interface:Rechercher des utilisateurs
- Méthode HTTP:GET
- Chemin:
/api/user/search - Exigence d'authentification:Administrateur
- Description de la fonction: recherche les utilisateurs en fonction de mots-clés et de groupes
💡 Exemple de demande:
const response = await fetch('/api/user/search?keyword=test&group=default&p=1&page_size=20', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": 1,
"username": "testuser",
"display_name": "Test User",
"role": 1,
"status": 1,
"email": "test@example.com",
"group": "default"
}
],
"total": 1,
"page": 1,
"page_size": 20
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Search user failed"
}🧾 Description du champ:
keyword(Chaîne): mot-clé de recherche, peut correspondre au nom d'utilisateur, au nom d'affichage ou à l'adresse e-mailgroup(String): condition de filtrage des groupes d'utilisateursp(Numéro): Numéro de page, par défaut 1page_size(Nombre) : éléments par page, par défaut 20
Obtenir des informations sur un seul utilisateur
- Nom de l'interface:Obtenir des informations sur un seul utilisateur
- Méthode HTTP:GET
- Chemin:
/api/user/:id - Exigence d'authentification:Administrateur
- Description de la fonction:Récupère des informations détaillées sur un utilisateur spécifié, y compris les vérifications d'autorisation
💡 Exemple de demande:
const response = await fetch('/api/user/123', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": "",
"data": {
"id": 123,
"username": "targetuser",
"display_name": "Target User",
"role": 1,
"status": 1,
"email": "target@example.com",
"group": "default",
"quota": 1000000,
"used_quota": 50000,
"request_count": 100,
"aff_code": "ABC123",
"aff_count": 5
}
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Do not have the right to obtain information about users of the same level or higher"
}🧾 Description du champ:
id(Numéro): ID utilisateur, transmis via le chemin URL- Renvoie les informations complètes sur l'utilisateur, mais les administrateurs ne peuvent pas afficher les informations sur les utilisateurs ayant le même niveau d'autorisation ou un niveau d'autorisation supérieur.
Créer un utilisateur
- Nom de l'interface:Créer un utilisateur
- Méthode HTTP:POST
- Chemin:
/api/user/ - Exigence d'authentification:Administrateur
- Description de la fonction:Crée un nouveau compte utilisateur. Les administrateurs ne peuvent pas créer d'utilisateurs avec des autorisations supérieures ou égales aux leurs.
💡 Exemple de demande:
const response = await fetch('/api/user/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
username: "newuser",
password: "password123",
display_name: "New User",
role: 1
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": ""
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Unable to create a user with permissions greater than or equal to your own"
}🧾 Description du champ:
username(String) : Nom d'utilisateur, obligatoirepassword(String) : Mot de passe, obligatoiredisplay_name(Chaîne): Nom d'affichage, facultatif, par défaut le nom d'utilisateurrole(Numéro): rôle d'utilisateur, doit être inférieur au rôle d'administrateur actuel
Opérations de gestion (Désactiver/Réinitialiser, etc.)
- Nom de l'interface:Opérations de gestion (Désactiver/Réinitialiser, etc.)
- Méthode HTTP:POST
- Chemin:
/api/user/manage - Exigence d'authentification:Administrateur
- Description de la fonction:Effectue des opérations de gestion sur un utilisateur, notamment l'activation, la désactivation, la suppression, la promotion et la rétrogradation.
💡 Exemple de demande:
const response = await fetch('/api/user/manage', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
id: 123,
action: "disable"
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": ""
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Unable to disable super admin user"
}🧾 Description du champ:
id(Numéro): ID utilisateur cible, obligatoireaction(String) : Type d'opération, valeurs obligatoires, facultatives :disable: Désactiver l'utilisateurenable: Activer l'utilisateurdelete: Supprimer un utilisateurpromote: Promouvoir au rang d'administrateur (utilisateur root uniquement)demote: rétrograder au rang d'utilisateur normal
Mettre à jour l'utilisateur
- Nom de l'interface:Mettre à jour l'utilisateur
- Méthode HTTP:PUT
- Chemin:
/api/user/ - Exigence d'authentification:Administrateur
- Description de la fonction: met à jour les informations utilisateur, y compris les contrôles d'autorisation et la journalisation des modifications de quota.
💡 Exemple de demande:
const response = await fetch('/api/user/', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
},
body: JSON.stringify({
id: 123,
username: "updateduser",
display_name: "Updated User",
email: "updated@example.com",
quota: 2000000,
role: 1,
status: 1
})
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": ""
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Do not have the right to update user information with the same or higher permission level"
}🧾 Description du champ:
id(Numéro): ID utilisateur, obligatoireusername(String) : Nom d'utilisateur, facultatifdisplay_name(String): Nom d'affichage, facultatifemail(String): Adresse e-mail, facultatifpassword(String) : Nouveau mot de passe, facultatif. S'il est vide, le mot de passe n'est pas mis à jourquota(Nombre) : Quota utilisateur, facultatifrole(Numéro): rôle d'utilisateur, ne peut pas être supérieur ou égal au rôle d'administrateur actuelstatus(Numéro): Statut de l'utilisateur, en option
Supprimer un utilisateur
- Nom de l'interface:Supprimer l'utilisateur
- Méthode HTTP:DELETE
- Chemin:
/api/user/:id - Exigence d'authentification:Administrateur
- Description de la fonction:Supprime définitivement l'utilisateur spécifié. Les administrateurs ne peuvent pas supprimer les utilisateurs ayant un niveau d'autorisation identique ou supérieur.
💡 Exemple de demande:
const response = await fetch('/api/user/123', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'your_user_id'
}
});
const data = await response.json();✅ Exemple de réponse réussie:
{
"success": true,
"message": ""
}❗ Exemple de réponse en cas d'échec:
{
"success": false,
"message": "Do not have permission to delete users with the same permission level or higher"
}🧾 Description du champ:
id(Numéro): ID utilisateur, transmis via le chemin URL- Effectue une opération de suppression matérielle, irréversible