118 lines
4.9 KiB
Markdown
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 های موجود همچنان کار میکنند
|