#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) استفاده شود.
- تشکیل آرایهای از گروههای اصلی (مثل منابع انسانی، مالی، پروژه).
- درج زیرماژولها به صورت children در هر گروه.
- بازگرداندن داده با کلید
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 ساختار کامل ماژولها و صفحات قابلدسترسی سیستم را تولید میکند و پایهای برای سیستم مدیریت مجوزهاست. به دلیل استاتیک بودن داده، کارایی بالا و ریسک امنیتی پایین دارد.