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

118 lines
4.9 KiB
Markdown

# خلاصه پیاده‌سازی سیستم دسترسی Join
## تاریخ: 2025-01-20
## مشکل اصلی
کاربران فقط می‌توانستند کسب و کارهای خودشان (که مالک آن‌ها بودند) را در لیست کسب و کارها مشاهده کنند. اگر کاربری عضو کسب و کار دیگری بود، نمی‌توانست آن را در لیست مشاهده کند.
## راه‌حل پیاده‌سازی شده
### 1. تعریف دسترسی `join`
- دسترسی جدید `join: true` برای نشان دادن عضویت کاربر در کسب و کار
- این دسترسی در فیلد `business_permissions` ذخیره می‌شود
### 2. تغییرات در بکند
#### AuthContext (`app/core/auth_dependency.py`)
```python
def is_business_member(self, business_id: int) -> bool:
"""بررسی اینکه آیا کاربر عضو کسب و کار است یا نه (دسترسی join)"""
```
#### BusinessPermissionRepository (`adapters/db/repositories/business_permission_repo.py`)
```python
def get_user_member_businesses(self, user_id: int) -> list[BusinessPermission]:
"""دریافت تمام کسب و کارهایی که کاربر عضو آن‌ها است (دسترسی join)"""
```
#### BusinessService (`app/services/business_service.py`)
```python
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`)
```python
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 دسترسی‌ها
```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 های موجود همچنان کار می‌کنند