Bedrud مستندات

Bedrud یک سیستم نقش 5 سطحی برای کنترل دسترسی پیاده‌سازی می‌کند. هر نقش به مجموعه‌ای از رشته‌های دسترسی نگاشت می‌شود که در رکورد کاربر ذخیره شده و هم در لایه API (میان‌افزار بک‌اند) و هم در لایه UI (گاردهای فرانت‌اند و رندر شرطی) اعمال می‌شوند.

سلسله‌مراتب نقش‌ها

نقشآرایه دسترسیوزن بک‌اندتوضیحات
ابرمدیر['superadmin', 'user']4دسترسی کامل سیستم، تمام قابلیت‌های مدیریتی
مدیر['admin', 'user']3دسترسی کامل مدیریت، مانند ابرمدیر
ناظر['moderator', 'user']2نمای مدیریت فقط‌خواندنی، بدون تغییر
کاربر['user']1کاربر ثبت‌نام‌شده استاندارد
مهمان['guest']0شرکت‌کننده ثبت‌نام‌نشده، فقط عضویت

اعمال در بک‌اند

سطوح دسترسی از طریق میان‌افزار RequireAccess در هر مسیر مدیریتی اعمال می‌شوند. میان‌افزار آرایه دسترسی کاربر را با حداقل سطح مورد نیاز بررسی می‌کند:

  • مسیرهایی که نیاز به دسترسی superadmin دارند، مدیر، ناظر، کاربر و مهمان را رد می‌کنند
  • مسیرهایی که نیاز به دسترسی admin دارند، ابرمدیر و مدیر را مجاز می‌کنند
  • مسیرهایی که نیاز به دسترسی moderator دارند، ابرمدیر، مدیر و ناظر را مجاز می‌کنند

بک‌اند دسترسی‌ها را به صورت رشته‌ای جدا شده با کاما در پایگاه داده ذخیره می‌کند (ستون accesses در جدول users). نوع GORM StringArray سریال‌سازی و دی‌سریال‌سازی را مدیریت می‌کند.

یکپارچه‌سازی فرانت‌اند

نوع کاربر

اینترفیس User در user.store.ts شامل دو فیلد بولی مشتق شده از آرایه دسترسی است:

interface User {
  // ...
  isSuperAdmin: boolean  // accesses.includes('superadmin')
  isAdmin: boolean       // accesses.includes('admin') || accesses.includes('superadmin')
  accesses: string[]     // raw access list from backend
}

گارد مدیریت

طرح مدیریت (/dashboard/admin) به ابرمدیر، مدیر و ناظر اجازه عبور می‌دهد. ناظران یک متغیر زمینه isReadOnly=true دریافت می‌کنند:

// routes/dashboard/admin.tsx
const canAccess = user?.isSuperAdmin || accesses.includes('admin') || accesses.includes('moderator')

هوک useAdminContext() پرچم isReadOnly را به تمام مسیرهای فرزند ارائه می‌دهد:

const { isReadOnly } = useAdminContext()

آنچه ناظران می‌توانند ببینند در مقابل انجام دهند

صفحهمشاهدهتغییر
آمار کلی✅ آمار کاملنامعتبر
لیست کاربران✅ لیست کامل❌ بدون اقدامات گروهی
جزئیات کاربر✅ پروفایل کامل❌ بدون وضعیت/نقش/حذف/خروج
لیست اتاق‌ها✅ لیست کامل❌ بدون تعلیق/حذف/ویرایش سقف
جزئیات اتاق✅ اطلاعات کامل❌ بدون تعلیق/حذف/اخراج/سکوت
تنظیمات❌ هدایت شده

انتخابگر نقش

رابط مدیریت یک منوی کشویی <Select> را هم در جدول لیست کاربران و هم در صفحه جزئیات کاربر ارائه می‌دهد که جایگزین کلید باینری قبلی ابرمدیر می‌شود. گزینه‌های موجود:

گزینهذخیره به عنوان
ابرمدیر['superadmin', 'user']
مدیر['admin', 'user']
ناظر['moderator', 'user']
کاربر['user']
مهمان['guest']

منوی کشویی یک درخواست PUT /api/admin/users/:id/accesses با آرایه دسترسی کامل ارسال می‌کند.

مدیریت خط فرمان

دستورات bedrud user promote و bedrud user demote یک پرچم --role می‌پذیرند:

# Promote to superadmin (default)
bedrud user promote --email user@example.com
 
# Promote to admin
bedrud user promote --email user@example.com --role admin
 
# Promote to moderator
bedrud user promote --email user@example.com --role moderator
 
# Demote specific role
bedrud user demote --email user@example.com --role admin

مقادیر معتبر --role: superadmin، admin، moderator، user، guest.

مکان‌های کد

فایلهدف
server/internal/models/user.goثابت‌های سطح دسترسی بک‌اند
server/internal/middleware/میان‌افزار RequireAccess
server/internal/usercli/usercli.goتوابع مدیریت نقش خط فرمان
apps/web/src/lib/user.store.tsنوع User فرانت‌اند
apps/web/src/routes/dashboard/admin.tsxگارد مدیریت + زمینه isReadOnly
apps/web/src/components/admin/UserTable.tsxمنوی کشویی انتخابگر نقش + نشان‌ها
apps/web/src/components/admin/RoomTable.tsxماسک جدول اتاق فقط‌خواندنی