#P1471
POST /api/v2/operator/details
Route Info
| Method |
Endpoint |
Controller |
Middleware |
Purpose |
| POST |
/api/v2/operator/details |
V2BaseController@operatorDetails |
authWithJwt |
دریافت جزئیات اپراتور شامل اطلاعات شعبه، نقشها، تنظیمات و وضعیت فعالسازی |
منطق عملکرد تابع
تابع
operatorDetails با استفاده از شناسه اپراتور از توکن JWT، اطلاعات دقیق اپراتور فعلی را از جداول اصلی استخراج میکند:
- واکشی اطلاعات از جدول
operators شامل نام، نامکاربری، ایمیل، سطح دسترسی و نقش.
- تطبیق شناسه شعبه مربوطه از جدول
offices جهت دریافت نام و موقعیت مکانی.
- بررسی تنظیمات مرتبط با پنل از جدول
settings شامل تم، رنگ پایه، لوگو و favicon.
- درصورت تعریف APIهای خارجی برای شعبه (SMS یا API مرکزی)، افزودن اطلاعات از
application_interface.
- جمعبندی دادهها و بازگرداندن ساختار JSON نهایی.
| نام فیلد |
نوع داده |
الزامی |
توضیح |
| branch |
integer |
بله |
شناسه شعبهای که اپراتور در آن فعالیت میکند |
| operator_id |
integer |
خیر |
شناسه اپراتور (در JWT موجود است) |
نمونه درخواست:
POST /api/v2/operator/details
Authorization: Bearer {JWT_TOKEN}
Content-Type: application/json
{
"branch": 9
}
خروجی (Response)
| فیلد |
نوع داده |
توضیح |
| status |
boolean |
وضعیت موفقیت درخواست |
| meta.timestamp |
integer |
زمان پاسخ سرور |
| data.profile |
object |
اطلاعات شخصی و کاری اپراتور |
| data.office |
object |
مشخصات شعبه |
| data.settings |
object |
تم و تنظیمات رابط کاربری |
| data.apis |
array |
لیست APIهای فعال برای شعبه |
نمونه پاسخ:
{
"status": true,
"meta": { "timestamp": 1732290051 },
"data": {
"profile": {
"id": 51,
"name": "علیرضا ایرانپور",
"role": "operator",
"email": "a.iranpour88@gmail.com"
},
"office": {
"id": 9,
"name": "دفتر اصفهان",
"country": "IR"
},
"settings": {
"theme": "dark",
"base_color": "#212121",
"favicon": "/media/icons/favicon.ico"
},
"apis": [
{ "type": "sms", "service": "melipayamak", "status": 1 },
{ "type": "hub", "url": "https://hub.airplus.app/api/v2" }
]
}
}
نکات امنیتی
- وابسته به توکن JWT معتبر برای شناسایی اپراتور.
- هیچ فیلد رمز یا داده حساس رمزنگاری نشده نباید در پاسخ وجود داشته باشد.
- در ورژن فعلی endpoint سطح دسترسی اپراتور را بدون فیلتر نقش بازمیگرداند.
- تابع سبک است و فقط از چند جدول کاربر و تنظیمات خوانش دارد.
- وابستگی به latency اتصال به DB اصلی شعبه در درخواستهای همزمان زیاد است.
- پیشنهاد: caching ۵ دقیقهای پروفایل هر اپراتور بر اساس JWT.
وابستگیها
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Carbon\Carbon;
- use App\Helpers\Functions;
- use Exception;
کدهای خطا
| کد |
شرح خطا |
منبع |
| 1006 |
توکن JWT غیر معتبر یا منقضی شده |
authWithJwt |
| 400 |
داده ناقص یا branch نامعتبر |
Input Validation |
| 500 |
خطا در واکشی دادهها از DB |
operatorDetails() |
پیشنهادهای امنیتی
- فیلتر نقش برای جلوگیری از مشاهده تنظیمات سایر اپراتورها.
- رمزنگاری سمت سرور برای فیلدهای حساس (email, username).
- ثبت audit برای هر مشاهده پروفایل.
پیشنهادهای بهبود
- افزودن فیلد
last_login و activity_status برای مانیتورینگ.
- اضافهکردن بخش Roles و Permissions به خروجی JSON.
- ادغام با سرویس مرکزی احراز هویت (corporateAuth).
ممیزی و لاگها
- در نسخه فعلی هیچ لاگی برای مشاهده پروفایل ثبت نمیشود.
- پیشنهاد: ثبت رویداد
ProfileViewed در جدول system_logs.
جمعبندی
مسیر /operator/details برای مدیریت داخلی طراحی شده و اطلاعات کلیدی اپراتور را بدون واسطه برمیگرداند. در محیط production نیاز به کنترل دقیق نقشها و محدودسازی پاسخ دارد تا از افشای جزئیات مدیریتی جلوگیری شود.