91 lines
2.9 KiB
Python
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
|