#P1556
POST /api/v2/tasks/category/operation
Route Info
| Method | Endpoint | Controller | Middleware |
| POST | /api/v2/tasks/category/operation | OfficialController@operationTasksCategory | authWithJwt |
منطق عملکرد (Logic)
متد بر اساس پارامتر ورودی action رفتار متفاوتی دارد. تمام عملیات مستقیماً با Query Builder (بدون مدل Eloquent) انجام میشود:
- Action = store:
- درج رکورد جدید در جدول
tasks_categories. - فیلدهای
branch(از ریکوئست) وuser(از آبجکتoperatorتزریق شده) به صورت خودکار ست میشوند.
- درج رکورد جدید در جدول
- Action = update:
- آپدیت رکورد در
tasks_categoriesبر اساسidورودی. - فقط فیلدهای
title,color,iconبروزرسانی میشوند.
- آپدیت رکورد در
- Action = delete:
- حذف رکورد از
tasks_categoriesبر اساسid. - حذف آبشاری دستی (Manual Cascade): بلافاصله پس از حذف دسته، تمام رکوردهای جدول
tasks_itemsکه متعلق به این دسته هستند حذف میشوند. - سپس تمام رکوردهای جدول
tasks_notesکه متعلق به آن تسکها بودند حذف میشوند.
- حذف رکورد از
پارامترهای ورودی
ورودی به صورت JSON. پارامتر data آرایهای شامل جزئیات است.
POST /api/v2/tasks/category/operation
Authorization: Bearer <JWT>
{
"action": "store", // مقادیر مجاز: store, update, delete
"id": 15, // فقط برای update و delete الزامی است
"data": { // برای delete نیازی به ارسال محتوای این آبجکت نیست اما کلید data باید باشد
"title": "عنوان دسته",
"color": "#FF0000",
"icon": "fa-home"
}
}
خروجیها
موفق:
{
"status": true,
"time": 1732036500
}
خطا (Exception):
{
"status": false,
"time": 1732036505,
"message": "Undefined array key \"title\"", // مثال خطا
"trace": [...]
}
تحلیل ریسک و امنیت (مهم)
- آسیبپذیری IDOR (بسیار مهم): در عملیات
updateوdelete، هیچ بررسی روی اینکه آیاidارسالی متعلق بهbranchجاری است انجام نمیشود. کاربر میتواند دستهبندیهای سایر شعبهها را حذف یا ویرایش کند. - عدم وجود Transaction: در عملیات
delete، حذف از سه جدول جداگانه انجام میشود اما داخلDB::transactionنیست. اگر در میانه کار خطا رخ دهد، دادههای ناقص (Inconsistent Data) در دیتابیس باقی میمانند. - Validation: هیچ اعتبارسنجی روی وجود کلیدهای داخل آرایه
dataانجام نمیشود. ارسال جیسون ناقص منجر به Crash کد میشود.