from . import SYS_ADMIN, Application, Role, dbauth, User from sqlalchemy.sql import collate from flask_login import current_user from .errors import AutorisationError session = dbauth.session def get_roles(): roles = Role.query.order_by(collate(Role.roleid, 'NOCASE')).all() return roles def updaterole(data): if not current_user.is_SysAdmin(): raise AutorisationError(allowed_roles=[SYS_ADMIN], user_roles=None) currentrole = None if data["id"] == -1: currentrole = Role() currentrole.id = None session.add(currentrole) else: currentrole = Role.query.get(data["id"]) if currentrole is None: raise Exception ("404") currentrole.level = data["level"] currentrole.name = data["name"] currentrole.roleid = data["roleid"] currentrole.beschreibung = data["beschreibung"] session.commit() def deleteroles(roleids): if not current_user.is_SysAdmin(): raise AutorisationError(allowed_roles=[SYS_ADMIN], user_roles=None) for roleid in roleids: role: Role = Role.query.filter(Role.roleid == roleid).one() if role is not None: appq = Application.query for app in appq: if role in app.roles: app.roles.remove(role) # remove kann hier einfach so verwendet werden, da nicht über app.roles iteriert wird userq = User.query for user in userq: for userapp in user.userapps: if role in userapp.userapp_roles: userapp.userapp_roles.remove(role) # remove kann hier einfach so verwendet werden, da nicht über userapp_roles iteriert wird session.delete(role) session.commit()