Bedrud مستندات

داشبورد مدیریت یک رابط وب برای مدیریت نمونه Bedrud شما فراهم می‌کند. کاربران superadmin می‌توانند آمار سیستم را مشاهده کنند، کاربران و اتاق‌ها را مدیریت کنند، تنظیمات سراسری نمونه را پیکربندی کنند و token (توکن) دعوت ایجاد کنند.

پیش‌نیازها

  • دسترسی superadmin: باید superadmin در آرایه accesses کاربر خود داشته باشید.
  • راه‌اندازی اولین مدیر: پس از نصب Bedrud، یک کاربر ایجاد کرده و از طریق CLI ارتقا دهید:
bedrud user create --email "admin@example.com" --password "securepassword" --name "Admin"
bedrud user promote --email "admin@example.com"

هیچ رابط وب یا API برای ایجاد اولین superadmin وجود ندارد. این موضوع عامدانه و به دلایل امنیتی است.

دسترسی به پنل مدیریت

پس از داشتن دسترسی superadmin، پنل مدیریت در /dashboard/admin در برنامه وب Bedrud شما در دسترس است.

ناوبری:

  • نوار کناری (sidebar) یک بخش “مدیریت” با لینک‌هایی به نمای کلی، کاربران، اتاق‌ها و تنظیمات نمایش می‌دهد. این بخش فقط برای کاربران superadmin قابل مشاهده است.
  • منوی کشویی (dropdown) کاربر در گوشه بالا سمت راست شامل لینک “پنل مدیریت” با آیکون سپر است.
  • کاربران غیرمدیر که تلاش می‌کنند به URLهای /dashboard/admin/* دسترسی پیدا کنند، به طور خودکار به /dashboard هدایت می‌شوند.

صفحه نمای کلی

صفحه نمای کلی در /dashboard/admin یک داشبورد با معیارهای کلیدی سیستم ارائه می‌دهد.

آمار سیستم

کارت‌ها نمایش می‌دهند:

  • کاربران آنلاین: تعداد کل شرکت‌کنندگان فعال یکتا در تمام اتاق‌ها
  • کل اتاق‌ها: تعداد کل اتاق‌های نمونه
  • کل کاربران: تعداد کل کاربران ثبت‌نام شده

وضعیت گواهی TLS

یک نشانگر رنگی وضعیت گواهی TLS سرور شما را نشان می‌دهد:

وضعیترنگمعنی
معتبرسبزگواهی معتبر است
نزدیک به انقضاکهرباییظرف ۳۰ روز آینده منقضی می‌شود
منقضی شدهقرمزگواهی منقضی شده است
پیکربندی نشدهخاکستریTLS غیرفعال است

وضعیت گواهی هر ۵ دقیقه به‌روزرسانی می‌شود.

نمودارها

  • ایجاد اتاق: نمودار میله‌ای اتاق‌های ایجاد شده در ۸ هفته گذشته
  • ثبت‌نام‌های اخیر: لیست جدیدترین ثبت‌نام‌های کاربران

مدیریت کاربران

لیست کاربران

لیست کاربران در /dashboard/admin/users تمام کاربران ثبت‌نام شده را در یک جدول قابل جستجو و مرتب‌سازی نمایش می‌دهد.

ستون‌ها:

  • نام: نام نمایشی کاربر
  • ایمیل: آدرس ایمیل کاربر
  • ارائه‌دهنده: روش احراز هویت (local، google، github، guest، passkey)
  • نقش: نشان سطح دسترسی. برای کاربران با دسترسی superadmin عبارت “Superadmin” را نشان می‌دهد.
  • تاریخ ایجاد: تاریخ ثبت‌نام
  • وضعیت: کلید فعال/مسدود

عملیات‌ها:

  • جستجو: در نوار جستجو تایپ کنید تا کاربران بر اساس نام یا ایمیل فیلتر شوند (سمت کلاینت).
  • مرتب‌سازی: روی هدر هر ستون کلیک کنید تا مرتب شود. دوباره کلیک کنید تا صعودی/نزولی تغییر کند.
  • صفحه‌بندی: کنترل‌های ناوبری برای مرور لیست‌های بزرگ کاربران.

عملیات‌های کاربر

هر ردیف کاربر شامل دکمه‌های عملیات سریع است:

  • ارتقا/تنزل: تغییر بین سطوح دسترسی ["user"] و ["user", "superadmin"]. در ستون سطح دسترسی قابل مشاهده است.
  • فعال/مسدود: تغییر وضعیت حساب کاربر. کاربران مسدود شده نمی‌توانند وارد شوند یا توکن خود را تازه‌سازی کنند.
  • مشاهده جزئیات: روی ردیف کاربر کلیک کنید تا نمای جزئیات باز شود.

جزئیات کاربر

صفحه جزئیات در /dashboard/admin/users/:userId یک پروفایل کامل کاربر را نمایش می‌دهد.

اطلاعات نمایش داده شده:

  • نام کاربر، ایمیل، ارائه‌دهنده و تاریخ ثبت‌نام
  • نشان سطح دسترسی (superadmin/user)
  • نمودار فعالیت ایجاد اتاق (تاریخچه ۸ هفته)
  • لیست اتاق‌های ایجاد شده توسط کاربر

عملیات‌ها:

  • ارتقا/تنزل: دکمه اختصاصی در هدر جزئیات
  • حذف کاربر: کاربر و تمام داده‌های او را به طور دائمی حذف می‌کند. نیازمند تأیید ایمیل است. دکمه حذف برای حساب خودتان مخفی است (نمی‌توانید خودتان را حذف کنید).

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


مدیریت اتاق‌ها

لیست اتاق‌ها

لیست اتاق‌ها در /dashboard/admin/rooms تمام اتاق‌های نمونه را نشان می‌دهد.

ستون‌ها:

  • نام اتاق: شناسه اتاق
  • نمایانی: عمومی، خصوصی یا فهرست‌نشده
  • حداکثر شرکت‌کنندگان: قابل ویرایش inline (درون‌خطی) — روی مقدار کلیک کنید تا تغییر دهید
  • وضعیت: فعال یا غیرفعال
  • تاریخ ایجاد: تاریخ ایجاد اتاق

عملیات‌ها:

  • جستجو: فیلتر اتاق‌ها بر اساس نام (سمت کلاینت)
  • مرتب‌سازی: روی هدر ستون‌ها کلیک کنید تا مرتب شوند
  • تعلیق: پایان یک تماس فعال بدون حذف اتاق
  • حذف: بستن دائمی یک اتاق با حذف آبشاری

جزئیات اتاق

صفحه جزئیات در /dashboard/admin/rooms/:roomId دید عمیقی به یک اتاق فراهم می‌کند.

تنظیمات اتاق:

  • نام اتاق، حالت نمایانی، حداکثر شرکت‌کنندگان
  • تغییر حالت Persistent (ماندگار): فعال کنید تا از پاکسازی خودکار اتاق‌های بیکار جلوگیری شود. این گزینه فقط برای superadmin در دسترس است — سازندگان اتاق نمی‌توانند آن را تغییر دهند.

شرکت‌کنندگان زنده:

  • لیست شرکت‌کنندگان که هر ۳ ثانیه به‌روزرسانی می‌شود
  • برای هر شرکت‌کننده: نام، زمان پیوستن، اطلاعات ترک (صدا/تصویر/اشتراک‌گذاری صفحه)
  • نمودار نرخ بیت: نمودار زنده نرخ بیت برای ترک‌های صوتی و تصویری
  • اخراج: حذف هر شرکت‌کننده از اتاق
  • قطع صدا: قطع صدای ترک‌های صوتی هر شرکت‌کننده

تنظیمات سیستم

صفحه تنظیمات در /dashboard/admin/settings در ۹ tab (تب) سازمان‌دهی شده است. پس از تغییر هر تب روی “ذخیره تغییرات” کلیک کنید (زبانه عمومی در تغییرات حالت ثبت‌نام به طور خودکار ذخیره می‌شود).

تب عمومی

  • حالت ثبت‌نام:
    • باز: هر کسی می‌تواند حساب بسازد
    • فقط با دعوت: کاربران جدید باید یک توکن دعوت معتبر ارائه دهند
    • بسته: بدون ثبت‌نام جدید — کاربران موجود همچنان می‌توانند وارد شوند
    • تغییرات هنگام تغییر حالت به طور خودکار ذخیره می‌شوند

مدیریت token دعوت (درون تب عمومی):

tokenها کنترل می‌کنند چه کسی می‌تواند در حالت فقط با دعوت ثبت‌نام کند.

  • ایجاد توکن: یک ایمیل اختیاری برای قفل کردن توکن به یک آدرس خاص وارد کنید و دوره انقضا را انتخاب کنید (۲۴ ساعت، ۷۲ ساعت، ۷ روز یا ۳۰ روز).
  • لیست توکن‌ها: تمام توکن‌ها را با وضعیتشان نشان می‌دهد. توکن‌های استفاده‌نشده نشان سبز “فعال” دارند و توکن‌های استفاده شده “استفاده شده” را به رنگ خاکستری نشان می‌دهند.
  • کپی توکن: روی دکمه کپی کلیک کنید تا مقدار ۳۲ کاراکتری توکن در کلیپ‌بورد شما کپی شود.
  • ابطال: یک توکن را حذف کنید تا از استفاده آن جلوگیری شود.

تب احراز هویت

  • کلیدهای عبور: تغییر وضعیت احراز هویت بدون رمز عبور FIDO2/WebAuthn
  • ارائه‌دهندگان OAuth: پیکربندی OAuth گوگل، گیت‌هاب و توییتر:
    • Client ID
    • Client Secret
    • Redirect URL

هر ارائه‌دهنده کارت پیکربندی مخصوص به خود را دارد. با پر کردن هر سه فیلد، یک ارائه‌دهنده را فعال کنید.

تب LiveKit

  • LiveKit خارجی: تغییر وضعیت برای استفاده از یک سرور LiveKit خارجی به جای سرور embedded
  • میزبان: میزبان و پورت سرور LiveKit (مثلاً 127.0.0.1:7880)
  • کلید API: کلید API سرور LiveKit
  • سکرت API (API Secret): API Secret سرور LiveKit

تب سرور

  • پورت: پورت سرور HTTP (پیش‌فرض: 80)
  • میزبان: نام میزبان سرور
  • دامنه: دامنه سرور
  • ایمیل: ایمیل مدیریتی (برای ثبت گواهی ACME استفاده می‌شود)
  • TLS: فعال کردن HTTPS با فایل‌های گواهی
  • ACME: فعال کردن مدیریت خودکار گواهی Let’s Encrypt
  • پروکسی معکوس: نشان دادن اینکه سرور پشت یک پروکسی است (بر تشخیص IP کلاینت تأثیر می‌گذارد)
  • مسیرهای گواهی: مسیرهای فایل گواهی و کلید (برای راه‌اندازی دستی TLS)
  • وضعیت گواهی: نشانگر درون‌خطی که سلامت فعلی گواهی TLS را نشان می‌دهد

تب CORS

  • مبدأهای مجاز: لیست جدا شده با کاما از مبدأهای CORS
  • هدرهای مجاز: لیست جدا شده با کاما از هدرهای درخواست مجاز
  • روش‌های مجاز: لیست جدا شده با کاما از روش‌های HTTP مجاز
  • Allow Credentials: فعال/غیرفعال کردن ارسال credentials (اعتبارنامه‌ها) در درخواست‌های cross-origin
  • حداکثر عمر: مدت زمان کش برای پاسخ‌های preflight CORS (ثانیه)

تب محدودیت‌های اتاق

تعداد اتاق‌های فعالی که یک کاربر می‌تواند ایجاد کند را کنترل می‌کند:

  • حداکثر اتاق برای هر کاربر: حداکثر تعداد اتاق‌های فعالی که یک کاربر غیر superadmin می‌تواند ایجاد کند (پیش‌فرض: ۱۰۰، ۰ = نامحدود). superadmin‌ها از این محدودیت معاف هستند.

تب سهمیه آپلود

محدودیت‌های ذخیره‌سازی برای آپلود تصاویر چت را کنترل می‌کند:

  • حداکثر بایت آپلود برای هر کاربر: سهمیه ذخیره‌سازی هر کاربر در تمام اتاق‌ها (پیش‌فرض: ۵۲۴۲۸۸۰۰۰ = ۵۰۰ مگابایت، ۰ = نامحدود). superadmin‌ها از این محدودیت معاف هستند.
  • آستانه دیسک جهانی: سقف ذخیره‌سازی کل برای همه کاربران. وقتی بیش از حد شود، همه آپلودها تا زمانی که مدیر فضا آزاد کند رد می‌شوند (پیش‌فرض: ۰ = نامحدود). این محدودیت برای همه از جمله superadmin‌ها اعمال می‌شود.

تب آپلود چت

پیکربندی نحوه ذخیره‌سازی آپلود تصاویر چت:

  • پشتیبان: disk (فایل سیستم محلی)، s3 (ذخیره‌سازی سازگار با S3)، یا inline (base64 embedded)
  • حداکثر بایت آپلود: حداکثر اندازه فایل برای هر آپلود
  • حداکثر درون‌خطی: حداکثر اندازه برای آپلودهای inline/base64
  • پوشه دیسک: پوشه محلی برای آپلودهای پشتیبان disk

پیکربندی S3 (وقتی پشتیبان s3 است):

  • نقطه پایانی (Endpoint)، سطل (Bucket)، منطقه (Region)
  • کلید دسترسی (Access Key)، کلید مخفی (Secret Key)
  • URL عمومی (Public URL)

تب ثبت وقایع

  • سطح ثبت: trace، debug، info، warn یا error. برای اشکال‌زدایی مفید است — برای دیدن لاگ‌های جزئی به debug تغییر دهید، سپس برای محیط عملیاتی به info برگردید.

عیب‌یابی

”پنل مدیریت قابل مشاهده نیست”

نشانه: بخش مدیریت در نوار کناری ظاهر نمی‌شود و لینک “پنل مدیریت” از منوی کشویی کاربر غایب است.

علت: کاربر وارد شده superadmin در آرایه accesses خود ندارد.

راه‌حل: از CLI برای ارتقای کاربر استفاده کنید:

bedrud user promote --email "your-email@example.com"

سپس خارج شده و دوباره وارد شوید تا یک JWT جدید با دسترسی‌های به‌روزرسانی شده دریافت کنید.

”تنظیمات ذخیره نمی‌شوند”

نشانه: ذخیره تنظیمات با موفقیت برمی‌گردد، اما مقادیر محرمانه بدون تغییر به نظر می‌رسند.

علت: سرور مقادیر محرمانه موجود را وقتی "••••••••" یا یک رشته خالی در درخواست به‌روزرسانی ارسال می‌کنید، حفظ می‌کند. این طراحی عمدی است — از بازنویسی تصادفی مقادیر محرمانه وقتی فقط فیلدهای غیرمحرمانه را تغییر می‌دهید جلوگیری می‌کند.

راه‌حل: مقدار واقعی محرمانه (نه جایگزین پوشانده شده) را در درخواست به‌روزرسانی ارسال کنید.

”نمی‌توانم حساب خودم را حذف کنم”

نشانه: دکمه حذف در صفحه جزئیات کاربر خودتان مخفی است یا API خطای 400 برمی‌گرداند.

علت: حذف خود به دلایل امنیتی مسدود شده است. نمی‌توانید حسابی که در حال حاضر با آن وارد شده‌اید را حذف کنید.

راه‌حل: از یک superadmin دیگر بخواهید حساب را حذف کند، یا از CLI به عنوان یک کاربر دیگر استفاده کنید.

”هنگام بازدید از URL مدیریت به داشبورد هدایت می‌شوم”

نشانه: بازدید مستقیم از /dashboard/admin به /dashboard هدایت می‌شود.

علت: مسیر نگهبان مدیریت، آرایه accesses در JWT شما را بررسی می‌کند. اگر superadmin موجود نباشد، نگهبان هدایت می‌کند.

راه‌حل: تأیید کنید که حساب شما دسترسی superadmin دارد. اگر دسترسی شما اخیراً تغییر کرده، خارج شده و دوباره وارد شوید تا JWT خود را تازه‌سازی کنید.


مشاهده همچنین