hesabixArc/hesabixAPI/docs/JOIN_PERMISSION_IMPLEMENTATION_SUMMARY.md
2025-09-25 22:36:08 +03:30

4.9 KiB

خلاصه پیاده‌سازی سیستم دسترسی Join

تاریخ: 2025-01-20

مشکل اصلی

کاربران فقط می‌توانستند کسب و کارهای خودشان (که مالک آن‌ها بودند) را در لیست کسب و کارها مشاهده کنند. اگر کاربری عضو کسب و کار دیگری بود، نمی‌توانست آن را در لیست مشاهده کند.

راه‌حل پیاده‌سازی شده

1. تعریف دسترسی join

  • دسترسی جدید join: true برای نشان دادن عضویت کاربر در کسب و کار
  • این دسترسی در فیلد business_permissions ذخیره می‌شود

2. تغییرات در بکند

AuthContext (app/core/auth_dependency.py)

def is_business_member(self, business_id: int) -> bool:
    """بررسی اینکه آیا کاربر عضو کسب و کار است یا نه (دسترسی join)"""

BusinessPermissionRepository (adapters/db/repositories/business_permission_repo.py)

def get_user_member_businesses(self, user_id: int) -> list[BusinessPermission]:
    """دریافت تمام کسب و کارهایی که کاربر عضو آن‌ها است (دسترسی join)"""

BusinessService (app/services/business_service.py)

def get_user_businesses(db: Session, user_id: int, query_info: Dict[str, Any]) -> Dict[str, Any]:
    """دریافت لیست کسب و کارهای کاربر (مالک + عضو)"""

API Endpoint (adapters/api/v1/businesses.py)

  • endpoint /api/v1/businesses/list به‌روزرسانی شد
  • حالا هم کسب و کارهای مالک و هم کسب و کارهای عضو را نمایش می‌دهد

افزودن کاربر (adapters/api/v1/business_users.py)

permission_obj = permission_repo.create_or_update(
    user_id=user.id,
    business_id=business_id,
    permissions={'join': True}  # دسترسی join به طور خودکار اضافه می‌شود
)

3. تغییرات در فرانت‌اند

BusinessDashboardService (hesabixUI/hesabix_ui/lib/services/business_dashboard_service.dart)

  • متد getUserBusinesses() به‌روزرسانی شد
  • حالا از API جدید استفاده می‌کند که هم مالک و هم عضو را پشتیبانی می‌کند

4. نحوه کارکرد

مالک کسب و کار

  • به طور خودکار عضو محسوب می‌شود
  • در لیست با نقش "مالک" نمایش داده می‌شود

SuperAdmin

  • به طور خودکار عضو همه کسب و کارها محسوب می‌شود

کاربران عضو

  • باید دسترسی join: true داشته باشند
  • در لیست با نقش "عضو" نمایش داده می‌شوند
  • می‌توانند کسب و کار را در لیست مشاهده کنند

5. مثال JSON دسترسی‌ها

{
  "join": true,
  "sales": {
    "read": true,
    "write": false
  },
  "reports": {
    "read": true,
    "export": false
  }
}

6. تست‌های انجام شده

تست 1: افزودن دسترسی join به کاربر موجود تست 2: دریافت لیست کسب و کارهای کاربر (مالک + عضو) تست 3: API endpoint لیست کسب و کارها تست 4: افزودن کاربر جدید به کسب و کار تست 5: نمایش کسب و کار در فرانت‌اند

7. فایل‌های تغییر یافته

بکند

  • app/core/auth_dependency.py - اضافه شدن متد is_business_member
  • adapters/db/repositories/business_permission_repo.py - اضافه شدن متد get_user_member_businesses
  • app/services/business_service.py - اضافه شدن متد get_user_businesses
  • adapters/api/v1/businesses.py - به‌روزرسانی endpoint لیست کسب و کارها
  • adapters/api/v1/business_users.py - اصلاح متد افزودن کاربر

فرانت‌اند

  • hesabixUI/hesabix_ui/lib/services/business_dashboard_service.dart - به‌روزرسانی متد getUserBusinesses

مستندات

  • docs/JOIN_PERMISSION_SYSTEM.md - مستندات کامل سیستم
  • migrations/versions/20250120_000002_add_join_permission.py - Migration

8. نتیجه نهایی

🎉 مشکل حل شد! حالا کاربران می‌توانند:

  • کسب و کارهایی که مالک آن‌ها هستند را مشاهده کنند (نقش: مالک)
  • کسب و کارهایی که عضو آن‌ها هستند را مشاهده کنند (نقش: عضو)
  • دسترسی join به طور خودکار هنگام افزودن کاربر به کسب و کار اضافه می‌شود

9. سازگاری

  • تمام تغییرات با سیستم قبلی سازگار است
  • کاربران موجود نیازی به تغییر ندارند
  • API های موجود همچنان کار می‌کنند