Skip to main content
#P1546

GET /personnel/access-list

Route Info

Method Endpoint Controller Middleware Purpose
GET /personnel/access-list OfficialController@personnelAccessList authWithJwt دریافت ساختار کامل سطوح دسترسی پرسنل و ماژول‌ها برای تنظیم مجوز

منطق عملکرد تابع

این تابع مجموعه‌ای از ماژول‌ها و بخش‌های قابل‌دسترسی در پنل کاربری را به‌صورت درختی بازمی‌گرداند. داده‌ها به شکل آرایه‌ای سازمان‌یافته شامل بخش‌های اصلی (personnel، organizational، salary، modules، contents و ...) و زیربخش‌های هر کدام هستند. هر زیربخش دارای id و title است تا در تنظیمات مدیریت دسترسی (permissions) استفاده شود.

  1. تشکیل آرایه‌ای از گروه‌های اصلی (مثل منابع انسانی، مالی، پروژه).
  2. درج زیرماژول‌ها به صورت children در هر گروه.
  3. بازگرداندن داده با کلید status=true و زمان درخواست (time()).

پارامترهای ورودی

این متد هیچ ورودی مستقیم از کاربر نمی‌پذیرد، اما نیاز به احراز هویت JWT دارد تا نقش کاربر مشخص شود.

نام محل نوع الزامی توضیح
Authorization Header string بله توکن JWT معتبر برای تعیین هویت اپراتور

ساختار خروجی

{
  "status": true,
  "time": 1732366012,
  "data": {
    "personnel": {
      "id": "personnel",
      "title": "پرسنل",
      "children": {
        "profile": {"title": "پروفایل کاربر", "id": "profile"},
        "attendance": {"title": "حضور و غیاب", "id": "attendance"},
        "document": {"title": "مدارک پرسنلی", "id": "document"},
        "bill": {"title": "صورت حساب پرسنل", "id": "bill"}
      }
    },
    "organizational": {"id": "organizational","title": "دپارتمان سازمانی","children": false},
    "salary": {"id": "salary","title": "حقوق و دستمزد","children": false},
    "modules": {
      "id": "modules",
      "title": "ماژول ها",
      "children": {
        "lottery": {"title": "ماژول لاتاری", "id": "lottery"},
        "lottery_registrations": {"title": "ثبت نام های ماژول لاتاری", "id": "lottery_registrations"}
      }
    }
  }
}

نکات امنیتی

  • فقط کاربرانی که توکن معتبر JWT دارند می‌توانند این لیست را مشاهده کنند.
  • در پاسخ هیچ داده حساس (مانند سطح دسترسی فردی یا تاریخچه مجوزها) وجود ندارد.
  • خروجی صرفاً ساختار دسترسی عمومی است که برای UIها استفاده می‌شود.

عملکرد

  • داده‌ها ثابت (static) هستند و از دیتابیس واکشی نمی‌شوند.
  • می‌توان آن را cache کرد (مثلاً Redis با TTL 24 ساعت).
  • زمان پاسخ: کمتر از 5ms.

Dependencies

  • Illuminate\Support\Facades\DB (برای سایر توابع مرتبط)
  • Carbon\Carbon (برای timestamp در خروجی)

کدهای خطا

کد شرح منبع
401 عدم احراز هویت Middleware
500 خطای سیستم در هنگام تولید ساختار دسترسی Exception Handler

پیشنهادهای امنیتی

  • ذخیره نتیجه در حافظه cache برای جلوگیری از فراخوانی بی‌مورد کنترلر.
  • افزودن کش جداگانه برای هر نقش (Role-based caching).

پیشنهادهای توسعه‌ای

  • اتصال مجوزها به Roleهای واقعی در دیتابیس برای کنترل دسترسی پویا.
  • افزودن سطح خواندن/نوشتن برای زیرماژول‌ها.
  • پشتیبانی از چندزبانگی titles.

ممیزی و ثبت وقایع

  • فراخوانی این متد نیازی به ثبت لاگ ندارد چون فقط داده استاتیک بازمی‌گرداند.

جمع‌بندی

personnelAccessList ساختار کامل ماژول‌ها و صفحات قابل‌دسترسی سیستم را تولید می‌کند و پایه‌ای برای سیستم مدیریت مجوزهاست. به دلیل استاتیک بودن داده، کارایی بالا و ریسک امنیتی پایین دارد.