""" Multi-tenant service for managing tenant-specific operations """ from typing import Optional from fastapi import Request from sqlalchemy.orm import Session from ..models import Tenant from ..config.settings import settings def get_current_tenant_id(request: Request) -> Optional[int]: """ Get the current tenant ID from the request """ return getattr(request.state, 'tenant_id', None) def verify_tenant_access(request: Request, db: Session, resource_tenant_id: int) -> bool: """ Verify that the current tenant has access to a resource """ if not settings.MULTI_TENANT_ENABLED: return True # If multi-tenancy is disabled, allow access current_tenant_id = get_current_tenant_id(request) return current_tenant_id == resource_tenant_id def check_tenant_isolation(request: Request, db: Session, model_class, id: int) -> bool: """ Check if a specific instance of a model belongs to the current tenant """ if not settings.MULTI_TENANT_ENABLED: return True current_tenant_id = get_current_tenant_id(request) # Assuming the model has a tenant_id attribute instance = db.query(model_class).filter(model_class.id == id).first() if not instance: return False # This is a generic approach - in practice you'd need to handle specific model types if hasattr(instance, 'tenant_id'): return instance.tenant_id == current_tenant_id else: # For models that aren't tenant-specific, allow access return True