from app.extensions import db from app.models.license import License, LicenseModule from app.models.module import Module def check_company_module_access(company_id, module_name): """Prüft, ob eine Firma ein Modul nutzen darf (License + CompanyModule).""" module = Module.query.filter_by(name=module_name).first() if not module: return False if module.standard: return True license = License.query.filter_by(company_id=company_id, aktiv=True).first() if license: if LicenseModule.query.filter_by( license_id=license.id, module_id=module.id, aktiv=True ).first(): return True from app.models.company_module import CompanyModule if CompanyModule.query.filter_by(company_id=company_id, module_id=module.id, aktiv=True).first(): return True return False def check_module_access(company_id, module_name): """Prüft, ob eine Firma ein Modul nutzen darf (ohne User-Check).""" return check_company_module_access(company_id, module_name) def check_user_module_access(user, module_name): """Prüft, ob ein bestimmter Benutzer ein Modul nutzen darf.""" if user.is_superadmin(): return True module = Module.query.filter_by(name=module_name).first() if not module: return False if module.standard: return True if not check_company_module_access(user.company_id, module_name): return False if user.is_firmadmin(): return True from app.models.user_module import UserModulePermission if UserModulePermission.query.filter_by(user_id=user.id, module_id=module.id, aktiv=True).first(): return True return False def get_aktive_module(company_id, user=None): """Liefert alle Module, die die Firma (bzw. der Benutzer) nutzen darf.""" all_modules = Module.query.order_by(Module.sortierung).all() license = License.query.filter_by(company_id=company_id, aktiv=True).first() aktiv_module_ids = set() if license: for lm in LicenseModule.query.filter_by(license_id=license.id, aktiv=True).all(): aktiv_module_ids.add(lm.module_id) from app.models.company_module import CompanyModule company_module_ids = { cm.module_id for cm in CompanyModule.query.filter_by(company_id=company_id, aktiv=True).all() } from app.models.user_module import UserModulePermission user_module_ids = set() if user and not user.is_firmadmin(): user_module_ids = { um.module_id for um in UserModulePermission.query.filter_by(user_id=user.id, aktiv=True).all() } result = [] for m in all_modules: if m.standard: result.append(m) elif m.id in aktiv_module_ids: result.append(m) elif m.id in company_module_ids: if user is None or user.is_firmadmin(): result.append(m) elif m.id in user_module_ids: result.append(m) return result