Skip to content

حساب‌ها و نقش‌ها ​

حساب پنل مالک، مدیر، نماینده یا حسابی با نقش سفارشی است. نقش مجموعه‌ای از محدوده‌های دسترسی و پیش‌فرض‌های محدودیت است. این مسیرها حساب‌ها را فهرست و تغییر می‌دهند، رمز می‌گذارند یا ورود دومرحله‌ای را بازنشانی می‌کنند، مصرف حساب را می‌خوانند، طرح حساب را تغییر می‌دهند و نقش‌ها را مدیریت می‌کنند.

زمان با ثانیهٔ یونیکس و ترافیک با بایت است. همهٔ این مسیرها مخصوص مالک‌اند. توکن کاملِ مالک به مسیرهای مجاز برای توکن دسترسی دارد؛ تغییر رمز و بازنشانی ورود دومرحله‌ای به نشست مرورگر نیاز دارند. توکن سفارشی حتی با همهٔ دسترسی‌ها نمی‌تواند مسیرهای مخصوص مالک را فراخوانی کند.

فهرست حساب‌ها ​

GET/api/adminsدسترسیowner

همهٔ حساب‌ها، با مالک، نقش، وضعیت، تعداد کاربر و محدودیت‌های مؤثر را برمی‌گرداند.

bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" "$BASE/admins"
json
[
  {
    "id": 7,
    "username": "shop",
    "role": "reseller",
    "roleId": 2,
    "roleName": "Reseller",
    "state": "active",
    "disabled": false,
    "totpEnabled": false,
    "expireAt": 1796000000,
    "trafficLimit": 1099511627776,
    "usedBytes": 82463372083,
    "clients": 24,
    "online": 3,
    "maxClients": 100,
    "note": "",
    "createdAt": 1793000000,
    "lastLoginAt": 1795915000
  }
]

ساخت حساب ​

POST/api/adminsدسترسیowner
فیلدنوعلازممعنی
usernamestringبله۳ تا ۳۲ نویسه بدون فاصله یا کوتیشن. یکتا.
passwordstringهنگام ساخترمز اولیه. هنگام تغییر نادیده گرفته می‌شود.
rolestringخیرowner، admin یا reseller. وقتی roleId صفر است استفاده می‌شود.
roleIdintegerخیرهر نقش، پیش‌فرض یا سفارشی. 0 با role: owner حساب را مالک می‌کند.
overridesobjectخیرمحدودیت‌هایی که پیش‌فرض نقش را برای این حساب عوض می‌کنند.
disabledbooleanخیرورود را ببند.
expireAtintegerخیرپایان حساب با ثانیهٔ یونیکس. 0 یعنی هرگز.
trafficLimitintegerخیرسهمیهٔ ترافیک با بایت. 0 یعنی بی‌نهایت.
notestringخیرمتن آزاد، حداکثر ۵۰۰ نویسه.
bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  -H "Content-Type: application/json" -X POST "$BASE/admins" \
  -d '{
    "username": "shop",
    "password": "a-long-password",
    "role": "reseller",
    "trafficLimit": 1099511627776,
    "expireAt": 1796000000,
    "overrides": { "maxClients": 100, "maxDevices": 2 }
  }'
json
{
  "id": 7,
  "username": "shop",
  "role": "reseller",
  "roleId": 2,
  "roleName": "Reseller",
  "state": "active",
  "disabled": false,
  "expireAt": 1796000000,
  "trafficLimit": 1099511627776,
  "usedBytes": 0,
  "clients": 0,
  "maxClients": 100
}

400 یعنی فیلد اشتباه یا نام کاربری گرفته‌شده. 402 یعنی لایسنس حساب دیگری را اجازه نمی‌دهد.

خواندن یک حساب ​

GET/api/admins/{id}دسترسیowner

یک حساب را برمی‌گرداند. پارامتر مسیر id شناسهٔ حساب است.

bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" "$BASE/admins/7"

404 یعنی چنین حسابی نیست.

تغییر حساب ​

PUT/api/admins/{id}دسترسیowner

همان فیلدهای ساخت را می‌فرستد. password اینجا نادیده گرفته می‌شود؛ از مسیر تغییر رمز استفاده کنید. آخرین مالک حذف یا به نقش دیگری تبدیل نمی‌شود.

bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  -H "Content-Type: application/json" -X PUT "$BASE/admins/7" \
  -d '{"username":"shop","roleId":2,"trafficLimit":2199023255552,"expireAt":1798592000,"disabled":false}'

پاسخ حساب تغییرکرده است. 400 یعنی فیلد اشتباه، نام گرفته‌شده، یا تغییری که آخرین مالک را برمی‌دارد.

حذف حساب ​

DELETE/api/admins/{id}دسترسیowner

حساب را حذف می‌کند. کاربرانش به‌طور پیش‌فرض به حساب دیگری منتقل می‌شوند یا حذف می‌شوند.

پارامترمحلنوعمعنی
idpathintegerشناسهٔ حساب.
clientsquerystringdelete کاربران حساب را حذف می‌کند، نه منتقل.
toqueryintegerحسابی که کاربران را می‌گیرد. پیش‌فرض خود صداکننده است.
bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  -X DELETE "$BASE/admins/7?to=1"
json
{ "ok": true, "clients": 24 }

clients تعداد کاربران منتقل یا حذف‌شده است. 400 یعنی حساب حذف نمی‌شود یا مقصد معتبر نیست.

گذاشتن رمز حساب دیگر ​

POST/api/admins/{id}/passwordدسترسیownerفقط نشست

مخصوص نشست. رمز تازه برای یک حساب می‌گذارد و نشست‌های دیگرش را می‌بندد.

فیلدنوعلازممعنی
passwordstringبلهرمز تازه، بررسی‌شده از نظر قدرت.
bash
curl -sS -b cookies.txt -X POST "$BASE/admins/7/password" \
  -H "Content-Type: application/json" -H "X-CSRF-Token: $CSRF" \
  -d '{"password":"a-new-long-password"}'
json
{ "ok": true }

400 یعنی رمز ضعیف است.

بازنشانی ورود دومرحله‌ای حساب دیگر ​

POST/api/admins/{id}/reset-2faدسترسیownerفقط نشست

مخصوص نشست. ورود دومرحله‌ای حساب را خاموش می‌کند، مثلاً وقتی گوشی‌اش گم شده.

bash
curl -sS -b cookies.txt -X POST "$BASE/admins/7/reset-2fa" \
  -H "X-CSRF-Token: $CSRF"
json
{ "ok": true }

404 یعنی چنین حسابی نیست.

خواندن ترافیک حساب ​

GET/api/admins/{id}/usageدسترسیowner
پارامترمحلنوعمعنی
idpathintegerشناسهٔ حساب.
rangequerystring24h، 7d، 30d یا 90d. پیش‌فرض 30d.
tzqueryintegerاختلاف زمانی کاربر با UTC به دقیقه، ۸۴۰- تا ۸۴۰. پیش‌فرض ۰.
bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  "$BASE/admins/7/usage?range=30d"

پاسخ یک سری مصرف با points، from، to، bucket و offset است. 404 یعنی چنین حسابی نیست.

تغییر طرح حساب ​

POST/api/admins/{id}/{action}دسترسیowner

سهمیهٔ ترافیک، تاریخ پایان یا وضعیت حساب را عوض می‌کند. کار در مسیر بر body.action مقدم است.

کارچه می‌کند
add-trafficbytes را به سهمیه اضافه می‌کند.
extenddays را از حالا یا پایان فعلی، هر کدام دیرتر باشد، اضافه می‌کند. bytes بیشتر از صفر سهمیه را عوض می‌کند. resetUsage مصرف را هم صفر می‌کند.
reset-usageمصرف حساب را صفر می‌کند.
disable یا enableورود را می‌بندد یا برمی‌گرداند.
disable-clients یا enable-clientsهمهٔ کاربران حساب را می‌بندد یا برمی‌گرداند.
فیلدنوعمعنی
actionstringهمان کار. وقتی مسیر کار را گفته، نادیده گرفته می‌شود.
bytesintegerبایت‌های اضافه، یا سهمیهٔ تازه برای extend وقتی بیشتر از صفر است.
daysintegerروزهای اضافه برای extend، ۰ تا ۳۶۵۰.
resetUsagebooleanبرای extend: مصرف را هم صفر کن.
bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  -H "Content-Type: application/json" -X POST "$BASE/admins/7/add-traffic" \
  -d '{"bytes":1099511627776}'

پاسخ حساب پس از کار است. 400 یعنی کار معتبر نیست یا آخرین مالک خاموش نمی‌شود.

فهرست نقش‌ها ​

GET/api/admin-rolesدسترسیowner

همهٔ نقش‌ها، پیش‌فرض اول، و کلیدهای دسترسی‌ای که نقش می‌تواند بدهد را برمی‌گرداند.

bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" "$BASE/admin-roles"
json
{
  "items": [
    {
      "id": 2,
      "name": "Reseller",
      "builtin": true,
      "perms": { "clients.view": "own", "clients.create": "own", "connections.view": "own" },
      "limits": { "maxClients": 0, "maxDevices": 0, "allowUnlimited": true },
      "createdAt": 0,
      "admins": 4
    }
  ],
  "perms": [
    { "key": "clients.view", "scoped": true },
    { "key": "groups.manage", "scoped": false }
  ]
}

محدوده none، own یا all است. برای groups.view و inbounds.view، own یعنی فقط گروه‌ها یا اینباندهای داده‌شده.

ساخت نقش ​

POST/api/admin-rolesدسترسیowner
فیلدنوعلازممعنی
namestringبله۱ تا ۴۰ نویسه. یکتا.
permsobjectخیرکلید دسترسی به محدوده. کلید ارسال‌نشده none است.
limitsobjectخیرپیش‌فرض حساب‌های این نقش.
bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  -H "Content-Type: application/json" -X POST "$BASE/admin-roles" \
  -d '{
    "name": "Support",
    "perms": {
      "clients.view": "all",
      "clients.edit": "all",
      "connections.view": "all",
      "connections.kick": "all"
    },
    "limits": { "maxClients": 0, "allowUnlimited": true }
  }'

پاسخ نقش تازه است. 400 یعنی فیلد اشتباه یا نام گرفته‌شده.

تغییر نقش ​

PUT/api/admin-roles/{id}دسترسیowner

همان فیلدهای ساخت را می‌فرستد. نقش‌های پیش‌فرض تغییر نمی‌کنند.

bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" \
  -H "Content-Type: application/json" -X PUT "$BASE/admin-roles/5" \
  -d '{"name":"Support","perms":{"clients.view":"all","clients.edit":"all"}}'

400 یعنی فیلد اشتباه، نقش پیش‌فرض یا نام گرفته‌شده.

حذف نقش ​

DELETE/api/admin-roles/{id}دسترسیowner

نقش سفارشی را حذف می‌کند. نقشی که حساب‌ها هنوز استفاده می‌کنند حذف نمی‌شود.

bash
curl -sS -H "Authorization: Bearer $OVIRA_TOKEN" -X DELETE "$BASE/admin-roles/5"
json
{ "ok": true }

400 یعنی نقش پیش‌فرض است. 409 یعنی حساب‌ها هنوز از آن استفاده می‌کنند.

شیء محدودیت‌ها ​

limits و overrides این فیلدها را دارند. در overrides فقط فیلدهایی که می‌فرستید مقدار نقش را عوض می‌کنند؛ 0 یعنی بی‌سقف.

فیلدنوعمعنی
maxClientsintegerسقف کاربر؛ 0 یعنی بی‌سقف.
allowedGroupsinteger[]شناسهٔ گروه‌های قابل استفادهٔ حساب.
allowedInboundsinteger[]شناسهٔ اینباندهای قابل استفادهٔ حساب.
requireGroupbooleanکاربر باید در گروه مجاز باشد، نه اینباند تکی.
maxClientTrafficintegerسقف ترافیک هر کاربر با بایت؛ 0 یعنی بی‌سقف.
maxClientDaysintegerعمر هر کاربر به روز؛ 0 یعنی بی‌سقف.
maxDevicesintegerسقف دستگاه هر کاربر؛ 0 یعنی بی‌سقف.
allowUnlimitedbooleanحساب می‌تواند کاربر بدون سقف ترافیک بسازد.
trafficLimitintegerسهمیهٔ پیش‌فرض حساب‌های تازهٔ این نقش، با بایت.

صفحه‌های مرتبط ​

نرم‌افزار انحصاری · مستندات آزاد برای اشتراک