Implement better user handling for large user sizes

This commit is contained in:
Götz 2019-04-14 23:12:31 +02:00
parent 49621569ec
commit c472ba4927
9 changed files with 59 additions and 10 deletions

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);
}
});
});

View File

@ -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]) }}"

View File

@ -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]) }}"

View File

@ -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 %}

View File

@ -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"

View File

@ -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"