Files

91 lines
2.9 KiB
Python

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