51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
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()
|
|
|
|
|
|
|