Files
eveAI/common/utils/middleware.py
Josako 6ef025363d - Partner model additions
- menu changes to allow for partners
- partner views and forms now in partner_forms.py and partner_views.py
- Introduction of services layer
- Allow all configuration to handle partner configurations, and adaptation of caching to allow for this
2025-05-02 13:10:59 +02:00

45 lines
1.4 KiB
Python

"""Middleware for the API
for handling tenant requests
"""
from flask_security import current_user
from flask import session, current_app, redirect
from .database import Database
from .eveai_exceptions import EveAINoSessionTenant, EveAINoSessionPartner, EveAINoManagementPartnerService, \
EveAINoManagementPartnerForTenant
from ..services.user_services import UserServices
def mw_before_request():
"""Before request
switch tenant schema
"""
if 'tenant' not in session:
raise EveAINoSessionTenant()
tenant_id = session['tenant']['id']
if not tenant_id:
raise EveAINoSessionTenant()
switch_allowed = False
if current_user.has_role('Super User'):
switch_allowed = True
if current_user.has_role('Tenant Admin') and current_user.tenant_id == tenant_id:
switch_allowed = True
if current_user.has_role('Partner Admin'):
if 'partner' not in session:
raise EveAINoSessionPartner()
management_service = next((service for service in session['partner']['services']
if service.get('type') == 'MANAGEMENT_SERVICE'), None)
if not management_service:
raise EveAINoManagementPartnerService()
if not UserServices.can_user_edit_tenant(tenant_id):
raise EveAINoManagementPartnerForTenant()
Database(tenant_id).switch_schema()