Initial Commit für das Grundgerüst der Anwendung, bestehend aus der Dev-Container Konfiguration, der Docker und docker-Compose Definitionen sowie der Verzeichnisse App_Server für die Backend-Programme sowie Client für die browserseitigen GUI-Komponenten

This commit is contained in:
gg committed 2026-08-17 16:10:11 +02:00
1 parent 10549934ea
commit 1ba78992a6
63 files changed
+5410

No files matched your search

@@ -0,0 +1,73 @@
from . import APP_ADMIN, SYS_ADMIN, User, Userapp, dbauth, Application, Role, apps_roles, userapps_roles
from .errors import AutorisationError, ApplicationError
from flask_login import current_user
from sqlalchemy import delete
session = dbauth.session
def get_applications():
apps = []
for app in Application.query:
# Die Application wird nur zurückgegeben, wenn der current-User SysAdmin ist oder wenn
# der current_user in der zurückzugebenden Application AppAdmin ist
if current_user.is_SysAdmin() or current_user.has_permission(app.appid, [APP_ADMIN]):
if not current_user.is_SysAdmin():
for role in list(app.roles):
if role.roleid == SYS_ADMIN:
app.roles.remove(role)
apps.append(app)
return apps
def updateapplication(data):
if not current_user.is_SysAdmin():
raise AutorisationError(allowed_roles=[SYS_ADMIN], user_roles=current_user.get_userapproles(data["appid"]))
currentapp = None
if data["id"] == -1:
currentapp = Application()
currentapp.id = None
session.add(currentapp)
else:
currentapp = Application.query.get(data["id"])
if currentapp is None:
raise Exception ("404")
currentapp.name = data["name"]
currentapp.appid = data["appid"]
currentapp.minversion = data["minversion"]
currentapp.beschreibung = data["beschreibung"]
session.commit()
def deleteapplications(appids):
if not current_user.is_SysAdmin():
raise AutorisationError(allowed_roles=[SYS_ADMIN], user_roles=None)
for appid in appids:
app: Application = Application.query.filter(Application.appid == appid).one()
if app is not None:
# Die Datensätze in "apps_roles" müssen gelöscht werden
app.roles.clear()
# UserApps löschen
q_userapps = dbauth.select(Userapp). where(Userapp.appid == app.id)
for userapp in dbauth.session.scalars(q_userapps):
userapp.userapp_roles.clear()
session.delete(userapp)
session.delete(app)
session.commit()
def updateapplicationroles(approles):
# Änderungen an Applications darf grundsätzlich nur der SysAdmin machen
if not current_user.is_SysAdmin():
raise AutorisationError(allowed_roles=[SYS_ADMIN], user_roles=None)
for appidinfo in approles:
app: Application = Application.query.filter(Application.appid == appidinfo["appid"]).one()
if app is None:
raise ApplicationError(f"Die Application mit der Appid {appidinfo['appid']} existiert nicht", )
for roleidinfo in appidinfo["roles"]:
role: Role = Role.query.filter(Role.roleid == roleidinfo["roleid"]).one()
if role in app.roles:
if not roleidinfo['isChecked']:
app.roles.remove(role) # hier kann das remove einfach so verwendet werden, da nicht über app.roles iteriert wird
# TODO: die Rolle muss auch aus allen userapps für alle User gelöscht werden
else:
if roleidinfo['isChecked']:
app.roles.append(role)
session.commit()