Add class violation handling for delete user
This commit is contained in:
parent
c472ba4927
commit
f410e6de7a
@ -113,7 +113,15 @@ def realm_user_delete(request, realm_id, user_dn):
|
||||
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
|
||||
ldap_user = LdapUser.objects.get(dn=user_dn)
|
||||
if _is_deleteable_user(realm, ldap_user):
|
||||
user_delete_controller(ldap_user, realm)
|
||||
try:
|
||||
user_delete_controller(ldap_user, realm)
|
||||
except OBJECT_CLASS_VIOLATION as err:
|
||||
deletion_link = {'name': 'realm-user-delete', 'args': [realm.id, ldap_user.dn]}
|
||||
cancel_link = {'name': 'realm-user-detail', 'args': [realm.id, ldap_user.dn]}
|
||||
return render(request, 'user/user_confirm_delete.jinja2',
|
||||
{'realm': realm, 'user': ldap_user, 'deletion_link': deletion_link,
|
||||
'cancel_link': cancel_link,
|
||||
'extra_errors': f'Der Nutzer {ldap_user.username} konnte nicht gelöscht werden, da er der letzte Nutzer einer Gruppe ist. Bitte lösche die Gruppe zuerst oder trage einen anderen Nutzer in die Gruppe ein.'})
|
||||
return redirect('realm-user-list', realm_id)
|
||||
else:
|
||||
return redirect('permission-denied')
|
||||
@ -141,7 +149,15 @@ def realm_multiple_user_delete(request, realm_id):
|
||||
ldap_users = form.cleaned_data['ldap_users']
|
||||
for ldap_user in ldap_users:
|
||||
if _is_deleteable_user(realm, ldap_user):
|
||||
user_delete_controller(ldap_user, realm)
|
||||
try:
|
||||
user_delete_controller(ldap_user, realm)
|
||||
except OBJECT_CLASS_VIOLATION as err:
|
||||
blocked_users, deletable_users = get_deletable_blocked_users(ldap_users, realm)
|
||||
return render(request, 'realm/realm_user_multiple_delete.jinja2',
|
||||
{'form': form, 'realm': realm, 'deletable_users': deletable_users,
|
||||
'blocked_users': blocked_users,
|
||||
'confirm': True,
|
||||
'extra_errors': f'Nutzer {ldap_user} konnte nicht gelöscht werden, da er der letzte Nutzer einer Gruppe ist. Bitte tragen Sie vorher den Nutzer aus der Gruppe aus. Das löschen der restlichen Nutzer wurde unterbrochen.'})
|
||||
return redirect('realm-user-list', realm_id)
|
||||
return redirect('realm-user-list', realm.id)
|
||||
|
||||
@ -154,13 +170,7 @@ def realm_multiple_user_delete_confirm(request, realm_id):
|
||||
form = UserDeleteListForm(request.POST)
|
||||
if form.is_valid():
|
||||
ldap_users = form.cleaned_data['ldap_users']
|
||||
deletable_users = []
|
||||
blocked_users = []
|
||||
for ldap_user in ldap_users:
|
||||
if _is_deleteable_user(realm, ldap_user):
|
||||
deletable_users.append(ldap_user)
|
||||
else:
|
||||
blocked_users.append(ldap_user)
|
||||
blocked_users, deletable_users = get_deletable_blocked_users(ldap_users, realm)
|
||||
return render(request, 'realm/realm_user_multiple_delete.jinja2',
|
||||
{'form': form, 'realm': realm, 'deletable_users': deletable_users,
|
||||
'blocked_users': blocked_users,
|
||||
@ -173,6 +183,17 @@ def realm_multiple_user_delete_confirm(request, realm_id):
|
||||
{'form': form, 'realm': realm, 'users': users})
|
||||
|
||||
|
||||
def get_deletable_blocked_users(ldap_users, realm):
|
||||
deletable_users = []
|
||||
blocked_users = []
|
||||
for ldap_user in ldap_users:
|
||||
if _is_deleteable_user(realm, ldap_user):
|
||||
deletable_users.append(ldap_user)
|
||||
else:
|
||||
blocked_users.append(ldap_user)
|
||||
return blocked_users, deletable_users
|
||||
|
||||
|
||||
def _is_deleteable_user(realm, user):
|
||||
user_groups = LdapGroup.get_user_groups(realm, user, LdapGroup.ROOT_DN)
|
||||
user_group_names = [group.name for group in user_groups]
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
{% extends 'realm/realm_detailed.jinja2' %}
|
||||
{% import 'macros/form_macros.jinja2' as mform %}
|
||||
{% import 'macros/utils_macros.jinja2' as mutils %}
|
||||
|
||||
{% block detail_content %}
|
||||
<h2>Nutzer löschen</h2>
|
||||
{{ mutils.get_warning_box(extra_errors) }}
|
||||
{% if blocked_users %}
|
||||
<div class="alert alert-warning">
|
||||
<h3>Admin User festgestellt</h3>
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
{% extends 'base.jinja2' %}
|
||||
{% import 'macros/utils_macros.jinja2' as mutils %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-12 ">
|
||||
{{ mutils.get_warning_box(extra_errors) }}
|
||||
<div class="row justify-content-center justify-content-sm-center">
|
||||
<div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5">
|
||||
<div class="alert alert-warning" role="alert">
|
||||
|
||||
Reference in New Issue
Block a user