arc/docs/PERMISSIONS_COMPLETE_ANALYSIS.md
2026-04-14 19:34:55 +03:30

25 KiB
Executable file
Raw Permalink Blame History

تحلیل کامل دسترسی‌ها و Endpoint ها

این فایل شامل:

  1. دسترسی‌های موجود در UI
  2. دسترسی‌هایی که نیاز هستند اما در UI نیستند
  3. هر endpoint چه دسترسی باید داشته باشد
  4. وضعیت پیاده‌سازی (پیاده‌سازی شده یا نه)

📋 دسترسی‌های موجود در UI (users_permissions_page.dart)

✅ بخش‌های موجود:

Section Actions موجود در UI توضیحات
people add, view, edit, delete ✅ موجود
people_transactions add, view, edit, delete, draft ✅ موجود
products add, view, edit, delete ✅ موجود
price_lists add, view, edit, delete ✅ موجود
categories add, view, edit, delete ✅ موجود
product_attributes add, view, edit, delete ✅ موجود
bank_accounts add, view, edit, delete ✅ موجود
cash add, view, edit, delete ✅ موجود
petty_cash add, view, edit, delete ✅ موجود
checks add, view, edit, delete, collect, transfer, return ✅ موجود
wallet view, charge ✅ موجود
transfers add, view, edit, delete, draft ✅ موجود
invoices add, view, edit, delete, draft ✅ موجود
expenses_income add, view, edit, delete, draft ✅ موجود
accounting_documents add, view, edit, delete, draft ✅ موجود
chart_of_accounts add, view, edit, delete ✅ موجود
opening_balance view, edit ✅ موجود
warehouses add, view, edit, delete ✅ موجود
warehouse_transfers add, view, edit, delete, draft ✅ موجود
settings business, print, history, users ✅ موجود
storage view, delete ✅ موجود
sms history, templates ✅ موجود
marketplace view, buy, invoices ✅ موجود

❌ دسترسی‌های مورد نیاز که در UI نیستند

🔴 بخش‌های جدید که باید به UI اضافه شوند:

Section Actions مورد نیاز توضیحات استفاده در
reports view, export گزارش‌ها و داشبورد kardex.py, business_dashboard.py, products.py (reports), invoices.py (reports)
fiscal_years view, add, edit, delete سال‌های مالی fiscal_years.py
boms add, view, edit, delete فهرست مواد (BOM) boms.py
invoices export ❌ موجود نیست - باید اضافه شود invoices.py (export endpoints)
products export ❌ موجود نیست - باید اضافه شود products.py (export endpoints)

📊 لیست کامل Endpoint ها با دسترسی مورد نیاز

🔴 اولویت بالا - امنیت حساس

1. businesses.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
PUT /{business_id} settings.business ❌ ندارد الان @require_business_management() - باید به require_business_access + dependency تبدیل شود
POST /{business_id}/logo settings.print ❌ ندارد الان فقط @require_business_access - باید dependency اضافه شود
GET /{business_id}/logo settings.print یا view ❌ ندارد بدون decorator - باید @require_business_access + dependency اضافه شود
POST /{business_id}/stamp settings.print ❌ ندارد الان فقط @require_business_access - باید dependency اضافه شود
GET /{business_id}/stamp settings.print یا view ❌ ندارد بدون decorator - باید @require_business_access + dependency اضافه شود
GET /{business_id}/print-settings settings.print ❌ ندارد بدون decorator - باید @require_business_access + dependency اضافه شود
PUT /{business_id}/print-settings settings.print ❌ ندارد الان @require_business_management() - باید به require_business_access + dependency تبدیل شود

2. business_users.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
GET /{business_id}/users/{user_id} settings.users ⚠️ manual check الان manual check دارد - باید به dependency تبدیل شود
GET /{business_id}/users settings.users ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /{business_id}/users/add settings.users ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
PUT /{business_id}/users/{user_id}/permissions settings.users ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
DELETE /{business_id}/users/{user_id} settings.users ❌ ندارد فقط @require_business_access - باید dependency اضافه شود

نکته: در UI از settings.users استفاده می‌شود، نه settings.manage_users


🟡 اولویت متوسط

3. invoices.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} invoices.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id}/{invoice_id} invoices.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
PUT /business/{business_id}/{invoice_id} invoices.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
DELETE /business/{business_id}/{invoice_id} invoices.delete ✅ دارد پیاده‌سازی شده - require_business_permission_dep("invoices", "delete")
GET /business/{business_id}/{invoice_id}/pdf invoices.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
POST /business/{business_id}/installments/search invoices.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /business/{business_id}/installments/export/excel invoices.export ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
سایر export/list - invoices.view یا export ❌ ندارد بسته به نوع endpoint

نکته: برای endpoint هایی با invoice_id باید از require_business_permission_by_entity_dep("invoices", "action", Document, "invoice_id") استفاده شود.

4. products.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} products.add ⚠️ manual check manual check دارد - باید به dependency تبدیل شود
POST /business/{business_id}/search products.view ⚠️ manual check manual check دارد - باید به dependency تبدیل شود
GET /business/{business_id}/{product_id} products.view ⚠️ manual check manual check دارد - باید به require_business_permission_by_entity_dep تبدیل شود
PUT /business/{business_id}/{product_id} products.edit ⚠️ manual check manual check دارد - باید به require_business_permission_by_entity_dep تبدیل شود
DELETE /business/{business_id}/{product_id} products.delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep اضافه شود
export endpoints - products.export ❌ ندارد action export باید به UI اضافه شود

5. categories.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} categories.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id} categories.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id}/{category_id} categories.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
PUT /business/{business_id}/{category_id} categories.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
DELETE /business/{business_id}/{category_id} categories.delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود

6. price_lists.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} price_lists.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id} price_lists.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id}/{price_list_id} price_lists.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
PUT /business/{business_id}/{price_list_id} price_lists.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
DELETE /business/{business_id}/{price_list_id} price_lists.delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
POST /business/{business_id}/{price_list_id}/products price_lists.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
POST /business/{business_id}/{price_list_id}/copy price_lists.add ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود

7. product_attributes.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} product_attributes.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id} product_attributes.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id}/{attribute_id} product_attributes.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
PUT /business/{business_id}/{attribute_id} product_attributes.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
DELETE /business/{business_id}/{attribute_id} product_attributes.delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود

8. warehouses.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} warehouses.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id} warehouses.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id}/{warehouse_id} warehouses.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
PUT /business/{business_id}/{warehouse_id} warehouses.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
DELETE /business/{business_id}/{warehouse_id} warehouses.delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود

9. warehouse_docs.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} warehouse_transfers.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /business/{business_id}/search warehouse_transfers.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET/PUT/DELETE /business/{business_id}/{doc_id} warehouse_transfers.view/edit/delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود

10. accounts.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} chart_of_accounts.add ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id} chart_of_accounts.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /business/{business_id}/{account_id} chart_of_accounts.view ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
PUT /business/{business_id}/{account_id} chart_of_accounts.edit ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود
DELETE /business/{business_id}/{account_id} chart_of_accounts.delete ❌ ندارد فقط @require_business_access - باید require_business_permission_by_entity_dep استفاده شود

🟢 اولویت پایین

11. fiscal_years.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
GET /{business_id}/fiscal-years fiscal_years.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /{business_id}/fiscal-years/current fiscal_years.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود

⚠️ نکته: بخش fiscal_years در UI نیست - باید اضافه شود.

12. boms.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /business/{business_id} boms.add ⚠️ manual check manual check دارد (inventory.write) - باید به dependency تبدیل شود
GET /business/{business_id} boms.view ⚠️ manual check manual check دارد (inventory.view) - باید به dependency تبدیل شود
سایر endpoints - boms.view/edit/delete ❌ ندارد باید require_business_permission_by_entity_dep استفاده شود

⚠️ نکته: بخش boms در UI نیست - باید اضافه شود. یا می‌تواند از products استفاده کند.

13. kardex.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
POST /businesses/{business_id}/lines reports.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /businesses/{business_id}/lines/export/excel reports.export ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /businesses/{business_id}/lines/export/pdf reports.export ❌ ندارد فقط @require_business_access - باید dependency اضافه شود

⚠️ نکته: بخش reports در UI نیست - باید اضافه شود.

14. business_dashboard.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
GET /{business_id}/summary reports.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET /{business_id}/stats reports.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /{business_id}/info-with-permissions settings.view یا reports.view ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
سایر dashboard endpoints - reports.view ❌ ندارد باید dependency اضافه شود

15. report_templates.py

متد مسیر دسترسی مورد نیاز وضعیت پیاده‌سازی توضیحات
GET /business/{business_id} settings.edit یا بخش جداگانه ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
POST /business/{business_id} settings.edit ❌ ندارد فقط @require_business_access - باید dependency اضافه شود
GET/PUT/DELETE /business/{business_id}/{template_id} settings.edit ❌ ندارد باید require_business_permission_by_entity_dep استفاده شود

نکته: می‌تواند از settings.edit استفاده کند یا بخش جداگانه report_templates اضافه شود.


✅ Endpoint هایی که الان dependency دارند

فایل‌های کامل:

  • ✅ cash_registers.py - اکثر endpoint ها
  • ✅ petty_cash.py - اکثر endpoint ها
  • ✅ bank_accounts.py - اکثر endpoint ها
  • ✅ persons.py - اکثر endpoint ها
  • ✅ receipts_payments.py - endpoint های اصلی
  • ✅ transfers.py - endpoint های اصلی
  • ✅ checks.py - endpoint های اصلی
  • ✅ expense_income.py - endpoint های اصلی
  • ✅ documents.py - endpoint های اصلی
  • ✅ opening_balance.py - همه endpoint ها

فایل‌های جزئی:

  • ⚠️ invoices.py - فقط endpoint حذف دارد dependency
  • ⚠️ products.py - manual check دارد (باید به dependency تبدیل شود)
  • ⚠️ boms.py - manual check دارد (باید به dependency تبدیل شود)

📝 دسترسی‌هایی که باید به UI اضافه شوند

1. بخش reports (جدید)

{
  "reports": {
    "view": true,
    "export": true
  }
}

استفاده در:

  • kardex.py - تمام endpoint ها
  • business_dashboard.py - تمام endpoint ها
  • گزارش‌های مختلف در سایر فایل‌ها

Actions:

  • view: مشاهده گزارش‌ها و داشبورد
  • export: خروجی Excel/PDF گزارش‌ها

2. بخش fiscal_years (جدید)

{
  "fiscal_years": {
    "view": true,
    "add": true,
    "edit": true,
    "delete": true
  }
}

استفاده در:

  • fiscal_years.py - تمام endpoint ها

Actions:

  • view: مشاهده سال‌های مالی
  • add: ایجاد سال مالی جدید
  • edit: ویرایش سال مالی
  • delete: حذف سال مالی

3. بخش boms (جدید - اختیاری)

{
  "boms": {
    "add": true,
    "view": true,
    "edit": true,
    "delete": true
  }
}

استفاده در:

  • boms.py - تمام endpoint ها

یا می‌تواند از بخش products استفاده کند چون BOM مربوط به محصولات است.

Actions:

  • add: ایجاد BOM
  • view: مشاهده BOM ها
  • edit: ویرایش BOM
  • delete: حذف BOM

4. Action export برای بخش‌های موجود

باید به این بخش‌ها action export اضافه شود:

Section Action جدید استفاده در
invoices export invoices.py - export endpoints
products export products.py - export endpoints
سایر بخش‌ها export export endpoints مختلف

📊 خلاصه آماری

Endpoint های نیازمند dependency:

  • businesses.py: 7 endpoint
  • business_users.py: 5 endpoint
  • invoices.py: ~15 endpoint (فقط 1 تا دارد)
  • products.py: ~10 endpoint (manual check دارند)
  • categories.py: 5 endpoint
  • price_lists.py: 8 endpoint
  • product_attributes.py: 5 endpoint
  • warehouses.py: 6 endpoint
  • warehouse_docs.py: ~15 endpoint
  • accounts.py: 5 endpoint
  • fiscal_years.py: 2 endpoint
  • boms.py: ~8 endpoint
  • kardex.py: 3 endpoint
  • business_dashboard.py: ~10 endpoint
  • report_templates.py: ~9 endpoint

جمع کل: ~113 endpoint نیازمند dependency

Endpoint های با dependency:

  • ✅ ~40 endpoint (در فایل‌های cash_registers, petty_cash, bank_accounts, persons و...)

Endpoint های با manual check:

  • ⚠️ ~15 endpoint (در products.py, boms.py) - باید به dependency تبدیل شوند

🔧 توصیه‌های پیاده‌سازی

1. اضافه کردن بخش‌های جدید به UI

در فایل users_permissions_page.dart در تابع _getAllPermissions باید اضافه شود:

'reports': {
  'view': '${t.view} ${t.reports}',
  'export': '${t.export} ${t.reports}',
},
'fiscal_years': {
  'view': '${t.view} ${t.fiscalYears}',
  'add': '${t.add} ${t.fiscalYears}',
  'edit': '${t.edit} ${t.fiscalYears}',
  'delete': '${t.delete} ${t.fiscalYears}',
},
'boms': {  // اختیاری - می‌تواند از products استفاده کند
  'add': '${t.add} ${t.boms}',
  'view': '${t.view} ${t.boms}',
  'edit': '${t.edit} ${t.boms}',
  'delete': '${t.delete} ${t.boms}',
},

و به sectionConfigs اضافه شود:

{
  'title': 'گزارش‌ها',
  'icon': Icons.assessment,
  'sections': ['reports'],
},
{
  'title': 'سال‌های مالی',
  'icon': Icons.calendar_today,
  'sections': ['fiscal_years'],
},

2. اضافه کردن action export به بخش‌های موجود

باید به این بخش‌ها action export اضافه شود:

  • invoices
  • products
  • و سایر بخش‌هایی که export دارند

3. اصلاح endpoint ها

  1. تبدیل manual check ها به dependency

    • products.py
    • boms.py
  2. اضافه کردن dependency به endpoint های بدون dependency

    • استفاده از require_business_permission_dep برای endpoint هایی با business_id
    • استفاده از require_business_permission_by_entity_dep برای endpoint هایی با entity ID
  3. تغییر از @require_business_management() به @require_business_access + dependency

    • businesses.py - ویرایش کسب‌وکار و تنظیمات چاپ

✅ اولویت‌بندی نهایی

فاز 1 - اولویت بالا (امنیت):

  1. ✅ business_users.py - مدیریت کاربران (settings.users)
  2. ✅ businesses.py - تنظیمات کسب‌وکار (settings.business, settings.print)
  3. ✅ invoices.py - فاکتورها (invoices.*)

فاز 2 - اولویت متوسط:

  1. ✅ products.py - محصولات (products.*)
  2. ✅ accounts.py - حساب‌ها (chart_of_accounts.*)
  3. ✅ warehouses.py - انبارها (warehouses.*)
  4. ✅ categories.py, price_lists.py, product_attributes.py

فاز 3 - اولویت پایین:

  1. ✅ kardex.py, business_dashboard.py - گزارش‌ها (reports.*)
  2. ✅ fiscal_years.py - سال‌های مالی (fiscal_years.*)
  3. ✅ boms.py - BOM (boms.* یا از products استفاده کند)
  4. ✅ report_templates.py - قالب‌های گزارش

تاریخ تهیه: 2025-01-XX نسخه: 1.0