mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-09-19 18:31:16 +00:00
Remove admin or assistant instance if role was removed and there is no dependency
This commit is contained in:
parent
adbe8d0eb7
commit
cf433cb692
1 changed files with 29 additions and 8 deletions
|
@ -255,8 +255,10 @@ class UserView(SecureAdminModelView):
|
||||||
def on_model_change(self, form, model, is_created):
|
def on_model_change(self, form, model, is_created):
|
||||||
if not is_created:
|
if not is_created:
|
||||||
if model == current_user:
|
if model == current_user:
|
||||||
|
# Prevent locking out
|
||||||
if not form.active.data:
|
if not form.active.data:
|
||||||
raise ModelViewException("Tried to deactivate yourself as user!")
|
raise ModelViewException("Tried to deactivate yourself as user!")
|
||||||
|
|
||||||
if not model.has_role("admin"):
|
if not model.has_role("admin"):
|
||||||
raise ModelViewException("Tried to remove your admin role!")
|
raise ModelViewException("Tried to remove your admin role!")
|
||||||
|
|
||||||
|
@ -268,16 +270,35 @@ class UserView(SecureAdminModelView):
|
||||||
model, password, notify=False
|
model, password, notify=False
|
||||||
) # Password is automatically hashed with this function
|
) # Password is automatically hashed with this function
|
||||||
|
|
||||||
if model.has_role("assistant") and model.assistant is None:
|
user_assistant = model.assistant
|
||||||
semester_experiments = form.semester_experiments.data if form.semester_experiments else []
|
if model.has_role("assistant"):
|
||||||
|
if user_assistant is None:
|
||||||
|
# Create assistant instance after new role assignment
|
||||||
|
semester_experiments = form.semester_experiments.data if form.semester_experiments else []
|
||||||
|
|
||||||
assistant = Assistant(user=model, semester_experiments=semester_experiments)
|
assistant = Assistant(user=model, semester_experiments=semester_experiments)
|
||||||
self.session.add(assistant)
|
self.session.add(assistant)
|
||||||
|
elif (
|
||||||
|
user_assistant is not None
|
||||||
|
and not user_assistant.semester_experiments
|
||||||
|
and not user_assistant.appointments
|
||||||
|
and not user_assistant.experiment_marks
|
||||||
|
):
|
||||||
|
# Delete assistant instance if there is no dependency
|
||||||
|
# Useful for undoing an unwanted role assignment
|
||||||
|
self.session.delete(user_assistant)
|
||||||
|
|
||||||
if model.has_role("admin") and model.admin is None:
|
user_admin = model.admin
|
||||||
flash("Admin role was assigned!", "danger")
|
if model.has_role("admin"):
|
||||||
admin = Admin(user=model)
|
if user_admin is None:
|
||||||
self.session.add(admin)
|
# Create admin instance after new role assignment
|
||||||
|
flash(f"Admin role was assigned to {model}!", "danger")
|
||||||
|
admin = Admin(user=model)
|
||||||
|
self.session.add(admin)
|
||||||
|
elif user_admin is not None and not user_admin.experiment_marks:
|
||||||
|
# Delete admin instance if there is no dependency
|
||||||
|
# Useful for undoing an unwanted role assignment
|
||||||
|
self.session.delete(user_admin)
|
||||||
|
|
||||||
# Lower email
|
# Lower email
|
||||||
model.email = model.email.lower()
|
model.email = model.email.lower()
|
||||||
|
|
Loading…
Reference in a new issue