4.9 KiB
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_memberadapters/db/repositories/business_permission_repo.py- اضافه شدن متدget_user_member_businessesapp/services/business_service.py- اضافه شدن متدget_user_businessesadapters/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 های موجود همچنان کار میکنند