Mô-đun người dùng
Mô tả tính năng
Tiền tố giao diện thống nhất là http(s)://<your-domain>
Nên sử dụng HTTPS trong môi trường sản xuất để bảo mật mã thông báo xác thực. HTTP chỉ được khuyến nghị cho môi trường phát triển.
Hệ thống quản lý người dùng cốt lõi triển khai cấu trúc quyền bốn cấp (Công khai/Người dùng/Quản trị viên/Root) và quản lý vòng đời người dùng hoàn chỉnh. Nó bao gồm các tính năng như đăng ký/đăng nhập, hồ sơ cá nhân, quản lý mã thông báo, nạp tiền/thanh toán và hệ thống liên kết. Nó hỗ trợ 2FA, xác minh email và các phương thức đăng nhập OAuth khác nhau.
Đăng ký/Đăng nhập tài khoản
🔐 Không cần xác thực
Đăng ký tài khoản mới
- Tên giao diện:Đăng ký tài khoản mới
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/register - Yêu cầu xác thực:Công khai
- Mô tả chức năng:Tạo tài khoản người dùng mới, hỗ trợ chức năng xác minh email và mã giới thiệu
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "User registration successful"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "The administrator has closed new user registration"
}🧾 Mô tả trường:
username(String): Tên người dùng, bắt buộcpassword(Chuỗi): Mật khẩu, bắt buộcemail(String): Địa chỉ email, bắt buộc khi kích hoạt xác minh emailverification_code(String): Mã xác minh email, bắt buộc khi kích hoạt xác minh emailaff_code(String): Mã giới thiệu, tùy chọn
Đăng nhập người dùng
- Tên giao diện:Đăng nhập người dùng
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/login - Yêu cầu xác thực:Công khai
- Mô tả chức năng:Đăng nhập tài khoản người dùng, hỗ trợ Xác thực hai yếu tố (2FA)
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công (Không có 2FA):
{
"success": true,
"message": "Login successful",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "testuser",
"role": 1,
"quota": 1000000
}
}
}✅ Ví dụ phản hồi thành công (Yêu cầu 2FA):
{
"success": true,
"message": "Please enter the two-step verification code",
"data": {
"require_2fa": true
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "The administrator has turned off password login"
}🧾 Mô tả trường:
username(String): Tên người dùng, bắt buộcpassword(Chuỗi): Mật khẩu, bắt buộcrequire_2fa(Boolean): Có cần xác thực hai yếu tố hay không
Thông báo thanh toán Epay
- Tên giao diện:Thông báo thanh toán Epay
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/epay/notify - Yêu cầu xác thực:Công khai
- Mô tả chức năng:Xử lý thông báo gọi lại thanh toán từ hệ thống Epay
💡 Ví dụ yêu cầu:
_// 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_✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "Payment successful"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "The order does not exist or has been processed"
}🧾 Mô tả trường:
trade_no(String): Mã lệnh giao dịchmoney(String): Số tiền thanh toántrade_status(String): Trạng thái giao dịchsign(String): Xác thực chữ ký
Liệt kê tất cả các nhóm (Phiên bản chưa được xác thực)
- Tên giao diện:Liệt kê tất cả các nhóm
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/groups - Yêu cầu xác thực:Công khai
- Mô tả chức năng:Lấy thông tin về tất cả các nhóm người dùng trong hệ thống, có thể truy cập mà không cần đăng nhập
💡 Ví dụ yêu cầu:
const response = await fetch('/api/user/groups', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Ví dụ phản hồi thành công:
{
"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"
}
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to obtain group information"
}🧾 Mô tả trường:
data (Object): Ánh xạ thông tin nhóm
- Key (String): Tên nhóm
ratio(Số/Chuỗi): Tỷ lệ nhóm, “tự động” (auto) nghĩa là chọn tự độngdesc(String): Mô tả nhóm
🔐 Yêu cầu xác thực người dùng
Đăng xuất
- Tên giao diện:Đăng xuất
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/logout - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Xóa phiên người dùng và đăng xuất
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": ""
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Session clear failed"
}🧾 Mô tả trường:
Không có tham số yêu cầu
Hoạt động tự phục vụ của người dùng
🔐 Yêu cầu xác thực người dùng
Nhận nhóm của người dùng hiện tại
- Tên giao diện:Lấy nhóm người dùng hiện tại
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/self/groups - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Truy xuất thông tin nhóm có sẵn cho người dùng hiện đang đăng nhập, bao gồm Tỷ lệ nhóm và mô tả
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"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"
}
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to obtain group information"
}🧾 Mô tả trường:
data (Object): Nhóm ánh xạ thông tin nhóm có sẵn của người dùng.go:25-48
- Key (String): Tên nhóm
ratio(Number/String): Tỷ lệ nhóm, “tự động” (auto) nghĩa là tự động chọn nhóm tối ưudesc(String): Mô tả nhóm
Nhận hồ sơ cá nhân
- Tên giao diện:Nhận hồ sơ cá nhân
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/self - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Truy xuất thông tin chi tiết của người dùng hiện tại, bao gồm quyền, hạn ngạch, cài đặt, v.v.
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"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
}
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to obtain user information"
}🧾 Mô tả trường:
id(Số): ID người dùngusername(Chuỗi): Tên người dùngdisplay_name(String): Tên hiển thịrole(Số): Vai trò người dùng, 1=Người dùng bình thường, 10=Quản trị viên, 100=Người dùng rootstatus(Số): Trạng thái người dùng, 1=Bình thường, 2=Đã tắtemail(Chuỗi): Địa chỉ emailgroup(String): Nhóm được chỉ địnhquota(Số): Tổng hạn ngạchused_quota(Số): Hạn mức sử dụngrequest_count(Số): Số lượng yêu cầuaff_code(Chuỗi): Mã liên kếtaff_count(Số): Số lượng liên kếtaff_quota(Số): Hạn ngạch phần thưởng liên kếtaff_history_quota(Số): Hạn ngạch liên kết lịch sửinviter_id(Số): ID người mờilinux_do_id(Chuỗi): ID tài khoản LinuxDosetting(String): Chuỗi JSON cài đặt người dùngstripe_customer(Chuỗi): ID khách hàng sọcsidebar_modules(String): Chuỗi JSON cấu hình mô-đun thanh bênpermissions(Object): Thông tin quyền của người dùng
Nhận khả năng hiển thị mô hình
- Tên giao diện:Nhận khả năng hiển thị mô hình
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/models - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Truy xuất danh sách các mô hình AI mà người dùng hiện tại có thể truy cập
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": [
"gpt-3.5-turbo",
"gpt-4",
"claude-3-sonnet",
"claude-3-haiku"
]
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to get model list"
}🧾 Mô tả trường:
data (Array): Danh sách tên model mà người dùng có thể truy cập
Sửa đổi hồ sơ cá nhân
- Tên giao diện:Sửa đổi hồ sơ cá nhân
- Phương thức HTTP: PUT
- Đường dẫn:
/api/user/self - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Cập nhật thông tin cá nhân của người dùng hoặc cài đặt thanh bên
💡 Ví dụ yêu cầu (Cập nhật thông tin cá nhân):
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();💡 Ví dụ về yêu cầu (Cập nhật cài đặt thanh bên):
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "Update successful"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Input is illegal"
}🧾 Mô tả trường:
display_name(String): Tên hiển thị, tùy chọnemail(String): Địa chỉ email, tùy chọnpassword(String): Mật khẩu mới, tùy chọnsidebar_modules(String): Chuỗi JSON cấu hình mô-đun thanh bên, tùy chọn
Xóa tài khoản
- Tên giao diện:Xóa tài khoản
- Phương thức HTTP: XÓA
- Đường dẫn:
/api/user/self - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Xóa tài khoản người dùng hiện tại. Người dùng root không thể bị xóa
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": ""
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Cannot delete super administrator account"
}🧾 Mô tả trường:
Không có tham số yêu cầu
Tạo mã thông báo truy cập cấp người dùng
- Tên giao diện:Tạo mã thông báo truy cập cấp người dùng
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/token - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Tạo mã thông báo truy cập mới cho người dùng hiện tại, được sử dụng cho lệnh gọi API
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": "`<YOUR_API_KEY>`"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to generate token"
}🧾 Mô tả trường:
data (String): Mã thông báo truy cập được tạo
Nhận thông tin mã liên kết
- Tên giao diện:Nhận thông tin mã liên kết
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/aff - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Truy xuất hoặc tạo mã liên kết của người dùng, được sử dụng để mời người dùng mới đăng ký
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "",
"data": "ABC123"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to obtain promotion code"
}🧾 Mô tả trường:
data (Chuỗi): Mã liên kết của người dùng. Nếu nó không tồn tại, một chuỗi ngẫu nhiên gồm 4 ký tự sẽ được tạo tự động
Nạp hạn ngạch trực tiếp
- Tên giao diện:Nạp tiền theo hạn mức trực tiếp
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/topup - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Sử dụng mã đổi thưởng để nạp Hạn ngạch tài khoản
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "Redemption successful",
"data": 100000
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "The redemption code is invalid or has been used"
}🧾 Mô tả trường:
key(String): Mã đổi quà, bắt buộcdata(Số): Trả về số lượng Quota được quy đổi khi thành công
Gửi lệnh thanh toán
- Tên giao diện:Gửi lệnh thanh toán
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/pay - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Tạo lệnh thanh toán trực tuyến, hỗ trợ nhiều phương thức thanh toán
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"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"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "The recharge amount cannot be less than 1000"
}🧾 Mô tả trường:
amount(Số): Số tiền nạp vào, phải lớn hơn hoặc bằng Hạn ngạch nạp tiền tối thiểu topup.go:133-136payment_method(String): Phương thức thanh toán, chẳng hạn như “alipay”, “wxpay”, v.v.top_up_code(String): Mã nạp tiền, tùy chọndata(Đối tượng): Tham số hình thức thanh toánurl(String): URL gửi thanh toán
Tính số tiền thanh toán
- Tên giao diện:Tính toán số tiền thanh toán
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/amount - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Tính toán số tiền thanh toán thực tế tương ứng với Hạn ngạch nạp tiền được chỉ định
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "success",
"data": "10.00"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "The recharge amount cannot be less than 1000"
}🧾 Mô tả trường:
amount(Số): Số tiền nạp vào, phải lớn hơn hoặc bằng Hạn mức nạp tối thiểutop_up_code(String): Mã nạp tiền, tùy chọndata(String): Số tiền thực tế cần thanh toán (Yuan)
Chuyển hạn ngạch liên kết
- Tên giao diện:Chuyển hạn ngạch liên kết
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/aff_transfer - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Chuyển đổi Hạn ngạch phần thưởng liên kết thành Hạn ngạch có thể sử dụng được
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "Transfer successful"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Insufficient invitation quota!"
}🧾 Mô tả trường:
quota (Number): Số lượng Quota cần chuyển đổi, phải lớn hơn hoặc bằng đơn vị Quota tối thiểu
Cập nhật cài đặt người dùng
- Tên giao diện:Cập nhật cài đặt người dùng
- Phương thức HTTP: PUT
- Đường dẫn:
/api/user/setting - Yêu cầu xác thực:Người dùng
- Mô tả chức năng:Cập nhật cấu hình cài đặt cá nhân của người dùng
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": "Settings updated successfully"
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Setting format error"
}🧾 Mô tả trường:
- Nội dung yêu cầu có thể chứa bất kỳ trường cài đặt người dùng nào, được gửi ở định dạng JSON
- Các trường cụ thể tùy thuộc vào yêu cầu của trang cài đặt giao diện người dùng
Quản trị viên Quản lý người dùng
🔐 Yêu cầu xác thực của quản trị viên
Lấy tất cả danh sách người dùng
- Tên giao diện:Lấy tất cả danh sách người dùng
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/ - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Phân trang và truy xuất thông tin danh sách của tất cả người dùng trong hệ thống
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"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
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Failed to get user list"
}🧾 Mô tả trường:
p(Number): Số trang, mặc định là 1page_size(Number): Mục trên mỗi trang, mặc định là 20items(Array): Danh sách thông tin người dùngtotal(Số): Tổng số người dùngpage(Number): Số trang hiện tạipage_size(Số): Mục trên mỗi trang
Tìm kiếm người dùng
- Tên giao diện:Tìm kiếm người dùng
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/search - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Tìm kiếm người dùng dựa trên từ khóa và Nhóm
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"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
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Search user failed"
}🧾 Mô tả trường:
keyword(String): Từ khóa tìm kiếm, có thể khớp với tên người dùng, tên hiển thị hoặc emailgroup(String): Điều kiện lọc Nhóm người dùngp(Number): Số trang, mặc định là 1page_size(Number): Mục trên mỗi trang, mặc định là 20
Nhận thông tin người dùng
- Tên giao diện:Nhận thông tin người dùng
- Phương thức HTTP: NHẬN
- Đường dẫn:
/api/user/:id - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Truy xuất thông tin chi tiết cho một người dùng được chỉ định, bao gồm cả kiểm tra quyền
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"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
}
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Do not have the right to obtain information about users of the same level or higher"
}🧾 Mô tả trường:
id(Number): ID người dùng, được truyền qua đường dẫn URL- Trả về thông tin người dùng đầy đủ nhưng quản trị viên không thể xem thông tin của người dùng có cùng cấp quyền trở lên
Tạo người dùng
- Tên giao diện:Tạo người dùng
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/ - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Tạo tài khoản người dùng mới. Quản trị viên không thể tạo người dùng có quyền lớn hơn hoặc bằng quyền của họ
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": ""
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Unable to create a user with permissions greater than or equal to your own"
}🧾 Mô tả trường:
username(String): Tên người dùng, bắt buộcpassword(Chuỗi): Mật khẩu, bắt buộcdisplay_name(String): Tên hiển thị, tùy chọn, mặc định là tên người dùngrole(Số): Vai trò người dùng, phải nhỏ hơn vai trò quản trị viên hiện tại
Hoạt động quản lý (Tắt/Đặt lại, v.v.)
- Tên giao diện:Hoạt động quản lý (Tắt/Đặt lại, v.v.)
- Phương thức HTTP: POST
- Đường dẫn:
/api/user/manage - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Thực hiện các hoạt động quản lý đối với người dùng, bao gồm bật, tắt, xóa, thăng cấp và hạ cấp
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": ""
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Unable to disable super admin user"
}🧾 Mô tả trường:
id(Số): ID người dùng mục tiêu, bắt buộcaction(String): Kiểu thao tác, bắt buộc, giá trị tùy chọn:disable: Vô hiệu hóa người dùngenable: Cho phép người dùngdelete: Xóa người dùngpromote: Thăng cấp lên Admin (Chỉ dành cho người dùng Root)demote: Hạ cấp xuống người dùng thông thường
Cập nhật người dùng
- Tên giao diện:Cập nhật người dùng
- Phương thức HTTP: PUT
- Đường dẫn:
/api/user/ - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Cập nhật thông tin người dùng, bao gồm kiểm tra quyền và ghi nhật ký thay đổi hạn mức
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": ""
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Do not have the right to update user information with the same or higher permission level"
}🧾 Mô tả trường:
id(Số): ID người dùng, bắt buộcusername(String): Tên người dùng, tùy chọndisplay_name(String): Tên hiển thị, tùy chọnemail(String): Địa chỉ email, tùy chọnpassword(String): Mật khẩu mới, tùy chọn. Nếu trống, mật khẩu không được cập nhậtquota(Số): Hạn ngạch người dùng, tùy chọnrole(Number): Vai trò người dùng, không thể lớn hơn hoặc bằng vai trò quản trị viên hiện tạistatus(Số): Trạng thái người dùng, tùy chọn
Xóa người dùng
- Tên giao diện:Xóa người dùng
- Phương thức HTTP: XÓA
- Đường dẫn:
/api/user/:id - Yêu cầu xác thực:Quản trị viên
- Mô tả chức năng:Xóa cứng người dùng được chỉ định. Quản trị viên không thể xóa người dùng có cùng cấp quyền hoặc cao hơn
💡 Ví dụ yêu cầu:
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();✅ Ví dụ phản hồi thành công:
{
"success": true,
"message": ""
}❗ Ví dụ về phản hồi thất bại:
{
"success": false,
"message": "Do not have permission to delete users with the same permission level or higher"
}🧾 Mô tả trường:
id(Number): ID người dùng, được truyền qua đường dẫn URL- Thực hiện thao tác xóa cứng, không thể đảo ngược