Implement better user handling for large user sizes
This commit is contained in:
parent
49621569ec
commit
c472ba4927
@ -18,7 +18,7 @@ LDAP_SERVER_URI=ldap://ldap:389
|
||||
LDAP_ADMIN_USER_NAME=cn=admin,dc=test,dc=de
|
||||
LDAP_ADMIN_USER_PASSWORD=secret
|
||||
|
||||
LDAP_USER_ENTRY=ou=dc=test,dc=de
|
||||
LDAP_USER_ENTRY=dc=test,dc=de
|
||||
LDAP_USER_SELECTOR=(cn=%(user)s)
|
||||
|
||||
LDAP_GROUP_ENTRY=dc=test,dc=de
|
||||
|
||||
@ -65,8 +65,9 @@ def group_add(request, realm_id):
|
||||
'extra_error': 'Bitte wähle mindestens ein Mitglied aus. Falls kein Mitglied angezeigt wird, erstelle zuerst einen Nutzer'})
|
||||
# if a GET (or any other method) we'll create a blank form
|
||||
else:
|
||||
users = LdapUser.objects.all()
|
||||
form = AddLDAPGroupForm()
|
||||
return render(request, 'group/group_add.jinja2', {'form': form, 'realm': realm})
|
||||
return render(request, 'group/group_add.jinja2', {'form': form, 'realm': realm, 'users': users})
|
||||
|
||||
|
||||
@login_required
|
||||
@ -78,7 +79,7 @@ def group_update(request, realm_id, group_dn):
|
||||
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
|
||||
|
||||
group = LdapGroup.objects.get(dn=group_dn)
|
||||
|
||||
users = LdapUser.objects.all()
|
||||
if request.method == 'POST':
|
||||
form = AddLDAPGroupForm(request.POST)
|
||||
if form.is_valid():
|
||||
@ -105,7 +106,7 @@ def group_update(request, realm_id, group_dn):
|
||||
form = AddLDAPGroupForm(initial=data)
|
||||
|
||||
return render(request, 'group/group_detail.jinja2',
|
||||
{'form': form, 'realm': realm, 'group': group})
|
||||
{'form': form, 'realm': realm, 'group': group, 'users': users})
|
||||
|
||||
|
||||
@login_required
|
||||
|
||||
@ -156,6 +156,12 @@
|
||||
background-color: var(--danger);
|
||||
}
|
||||
|
||||
.table-checkbox-control-input:checked ~ .table-checkbox-control-label-add::before {
|
||||
color: #fff;
|
||||
border-color: var(--primary);
|
||||
background-color: var(--primary);
|
||||
}
|
||||
|
||||
.table-checkbox-control-label::after {
|
||||
position: absolute;
|
||||
top: 0.25rem;
|
||||
|
||||
@ -14,9 +14,9 @@ $(document).ready(function () {
|
||||
|
||||
$("#delete-all-checkbox").change(function () {
|
||||
if (document.getElementById('delete-all-checkbox').checked) {
|
||||
$('.delete-checkbox').prop("checked", true);
|
||||
$('.multiple-select-checkbox').prop("checked", true);
|
||||
} else {
|
||||
$('.delete-checkbox').prop("checked", false);
|
||||
$('.multiple-select-checkbox').prop("checked", false);
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -10,7 +10,7 @@
|
||||
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
|
||||
{{ mform.text_input(form.name) }}
|
||||
{{ form.members.label }}
|
||||
{{ mform.checkbox_input_for_choice_fields(form.members) }}
|
||||
{{ mform.user_select_table_input(form.members, users) }}
|
||||
<div class="d-flex mt-4">
|
||||
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
|
||||
<a href="{{ url('realm-group-list', args = [realm.id]) }}"
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
|
||||
{{ mform.text_input(form.name) }}
|
||||
{{ form.members.label }}
|
||||
{{ mform.checkbox_input_for_choice_fields(form.members) }}
|
||||
{{ mform.user_select_table_input(form.members,users) }}
|
||||
<div class="d-flex mt-4">
|
||||
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
|
||||
<a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}"
|
||||
|
||||
@ -286,4 +286,46 @@
|
||||
{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro user_select_table_input(field, users, css_classes='') -%}
|
||||
<table class="table table-hover table-striped table-inverse table-bordered data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="text-center">
|
||||
<input type="checkbox"
|
||||
class="table-checkbox-control-input"
|
||||
id="delete-all-checkbox"
|
||||
><label class="table-checkbox-control-label table-checkbox-control-label-add" for="delete-all-checkbox"></label>
|
||||
</th>
|
||||
<th scope="col">Nutzername</th>
|
||||
<th scope="col">E-Mail</th>
|
||||
<th scope="col">Vorname</th>
|
||||
<th scope="col">Nachname</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<input type="checkbox"
|
||||
class="table-checkbox-control-input multiple-select-checkbox"
|
||||
aria-describedby="{{ choice_label }}_help"
|
||||
name="{{ field.html_name }}"
|
||||
id="{{ user.username }}_{{ loop.index }}"
|
||||
value="{{ user.username }}"
|
||||
{% if field.value() and user.username in field.value() %}checked{% endif %}
|
||||
>
|
||||
<label class="table-checkbox-control-label table-checkbox-control-label-add" for="{{ user.username }}_{{ loop.index }}">
|
||||
|
||||
</label>
|
||||
</td>
|
||||
<td>{{ user.username }}</td>
|
||||
<td>{{ user.email }}</td>
|
||||
<td>{{ user.first_name }}</td>
|
||||
<td>{{ user.last_name }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endmacro %}
|
||||
@ -39,7 +39,7 @@
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<input type="checkbox"
|
||||
class="table-checkbox-control-input delete-checkbox"
|
||||
class="table-checkbox-control-input multiple-select-checkbox"
|
||||
id="user_{{ loop.index }}"
|
||||
value="{{ user.username }}"
|
||||
name="ldap_users"
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<input type="checkbox"
|
||||
class="table-checkbox-control-input delete-checkbox"
|
||||
class="table-checkbox-control-input multiple-select-checkbox"
|
||||
id="user_{{ loop.index }}"
|
||||
value="{{ user.username }}"
|
||||
name="ldap_users"
|
||||
|
||||
Reference in New Issue
Block a user