189 lines
6.9 KiB
Python
189 lines
6.9 KiB
Python
"""
|
|
مثالهایی از استفاده از سیستم دسترسی دو سطحی
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
from app.core.auth_dependency import get_current_user, AuthContext
|
|
from app.core.permissions import (
|
|
require_superadmin,
|
|
require_user_management,
|
|
require_business_management,
|
|
require_sales_write,
|
|
require_sales_delete,
|
|
require_accounting_write,
|
|
require_reports_export,
|
|
require_settings_manage_users,
|
|
require_any_permission,
|
|
require_business_access
|
|
)
|
|
from app.core.responses import ApiError
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
# مثال 1: دسترسیهای اپلیکیشن
|
|
@router.get("/admin/users")
|
|
@require_user_management()
|
|
def list_users(ctx: AuthContext = Depends(get_current_user)):
|
|
"""لیست کاربران - نیاز به دسترسی مدیریت کاربران در سطح اپلیکیشن"""
|
|
return {"message": "User list", "user_id": ctx.get_user_id()}
|
|
|
|
|
|
@router.get("/admin/businesses")
|
|
@require_business_management()
|
|
def list_businesses(ctx: AuthContext = Depends(get_current_user)):
|
|
"""لیست کسب و کارها - نیاز به دسترسی مدیریت کسب و کارها"""
|
|
return {"message": "Business list"}
|
|
|
|
|
|
@router.get("/admin/system-settings")
|
|
@require_superadmin()
|
|
def get_system_settings(ctx: AuthContext = Depends(get_current_user)):
|
|
"""تنظیمات سیستم - فقط superadmin"""
|
|
return {"message": "System settings"}
|
|
|
|
|
|
# مثال 2: دسترسیهای کسب و کار
|
|
@router.post("/business/{business_id}/sales")
|
|
@require_business_access("business_id")
|
|
@require_sales_write()
|
|
def create_sale(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""ایجاد فروش - نیاز به دسترسی نوشتن در بخش فروش"""
|
|
return {"message": f"Sale created for business {business_id}"}
|
|
|
|
|
|
@router.delete("/business/{business_id}/sales/{sale_id}")
|
|
@require_business_access("business_id")
|
|
@require_sales_delete()
|
|
def delete_sale(
|
|
business_id: int,
|
|
sale_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""حذف فروش - نیاز به دسترسی حذف در بخش فروش"""
|
|
return {"message": f"Sale {sale_id} deleted from business {business_id}"}
|
|
|
|
|
|
@router.post("/business/{business_id}/accounting/entries")
|
|
@require_business_access("business_id")
|
|
@require_accounting_write()
|
|
def create_accounting_entry(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""ایجاد سند حسابداری - نیاز به دسترسی نوشتن در بخش حسابداری"""
|
|
return {"message": f"Accounting entry created for business {business_id}"}
|
|
|
|
|
|
@router.get("/business/{business_id}/reports/export")
|
|
@require_business_access("business_id")
|
|
@require_reports_export()
|
|
def export_reports(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""صادرات گزارش - نیاز به دسترسی صادرات گزارش"""
|
|
return {"message": f"Reports exported for business {business_id}"}
|
|
|
|
|
|
@router.post("/business/{business_id}/users")
|
|
@require_business_access("business_id")
|
|
@require_settings_manage_users()
|
|
def add_business_user(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""اضافه کردن کاربر به کسب و کار - نیاز به دسترسی مدیریت کاربران کسب و کار"""
|
|
return {"message": f"User added to business {business_id}"}
|
|
|
|
|
|
# مثال 3: بررسی دسترسیهای ترکیبی
|
|
@router.get("/business/{business_id}/dashboard")
|
|
@require_business_access("business_id")
|
|
def get_business_dashboard(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""داشبورد کسب و کار - بررسی دسترسیهای مختلف"""
|
|
dashboard_data = {
|
|
"business_id": business_id,
|
|
"user_permissions": {
|
|
"can_read_sales": ctx.can_read_section("sales"),
|
|
"can_write_sales": ctx.can_write_section("sales"),
|
|
"can_delete_sales": ctx.can_delete_section("sales"),
|
|
"can_read_accounting": ctx.can_read_section("accounting"),
|
|
"can_write_accounting": ctx.can_write_section("accounting"),
|
|
"can_export_reports": ctx.can_export_section("reports"),
|
|
"can_manage_users": ctx.can_manage_business_users(),
|
|
}
|
|
}
|
|
|
|
return dashboard_data
|
|
|
|
|
|
# مثال 4: بررسی دسترسیهای پویا
|
|
@router.get("/business/{business_id}/permissions")
|
|
@require_business_access("business_id")
|
|
def get_user_permissions(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""دریافت دسترسیهای کاربر برای کسب و کار"""
|
|
return {
|
|
"app_permissions": ctx.app_permissions,
|
|
"business_permissions": ctx.business_permissions,
|
|
"is_superadmin": ctx.is_superadmin(),
|
|
"is_business_owner": ctx.is_business_owner(),
|
|
"can_access_business": ctx.can_access_business(business_id),
|
|
"permissions_info": {
|
|
"has_automatic_app_permissions": ctx.is_superadmin(),
|
|
"has_automatic_business_permissions": ctx.is_business_owner(),
|
|
"effective_permissions": {
|
|
"can_manage_users": ctx.can_manage_users(),
|
|
"can_manage_businesses": ctx.can_manage_businesses(),
|
|
"can_write_sales": ctx.can_write_section("sales"),
|
|
"can_delete_sales": ctx.can_delete_section("sales"),
|
|
"can_approve_sales": ctx.can_approve_section("sales"),
|
|
"can_export_reports": ctx.can_export_section("reports"),
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
# مثال 5: بررسی دسترسیهای پیچیده
|
|
@router.get("/business/{business_id}/sales/analytics")
|
|
@require_business_access("business_id")
|
|
def get_sales_analytics(
|
|
business_id: int,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""تحلیل فروش - نیاز به دسترسی خواندن فروش و صادرات گزارش"""
|
|
if not ctx.has_any_permission("sales", "read"):
|
|
raise ApiError("FORBIDDEN", "No permission to read sales data")
|
|
|
|
if not ctx.has_any_permission("reports", "export"):
|
|
raise ApiError("FORBIDDEN", "No permission to export analytics")
|
|
|
|
return {"message": f"Sales analytics for business {business_id}"}
|
|
|
|
|
|
# مثال 6: مدیریت دسترسیها (فقط superadmin)
|
|
@router.post("/admin/business/{business_id}/users/{user_id}/permissions")
|
|
@require_superadmin()
|
|
def update_user_business_permissions(
|
|
business_id: int,
|
|
user_id: int,
|
|
permissions: dict,
|
|
ctx: AuthContext = Depends(get_current_user)
|
|
):
|
|
"""بهروزرسانی دسترسیهای کاربر در کسب و کار - فقط superadmin"""
|
|
# اینجا باید منطق بهروزرسانی دسترسیها پیادهسازی شود
|
|
return {
|
|
"message": f"Permissions updated for user {user_id} in business {business_id}",
|
|
"permissions": permissions
|
|
}
|