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_NAME=cn=admin,dc=test,dc=de
|
||||||
LDAP_ADMIN_USER_PASSWORD=secret
|
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_USER_SELECTOR=(cn=%(user)s)
|
||||||
|
|
||||||
LDAP_GROUP_ENTRY=dc=test,dc=de
|
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'})
|
'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
|
# if a GET (or any other method) we'll create a blank form
|
||||||
else:
|
else:
|
||||||
|
users = LdapUser.objects.all()
|
||||||
form = AddLDAPGroupForm()
|
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
|
@login_required
|
||||||
@ -78,7 +79,7 @@ def group_update(request, realm_id, group_dn):
|
|||||||
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
|
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
|
||||||
|
|
||||||
group = LdapGroup.objects.get(dn=group_dn)
|
group = LdapGroup.objects.get(dn=group_dn)
|
||||||
|
users = LdapUser.objects.all()
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = AddLDAPGroupForm(request.POST)
|
form = AddLDAPGroupForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@ -105,7 +106,7 @@ def group_update(request, realm_id, group_dn):
|
|||||||
form = AddLDAPGroupForm(initial=data)
|
form = AddLDAPGroupForm(initial=data)
|
||||||
|
|
||||||
return render(request, 'group/group_detail.jinja2',
|
return render(request, 'group/group_detail.jinja2',
|
||||||
{'form': form, 'realm': realm, 'group': group})
|
{'form': form, 'realm': realm, 'group': group, 'users': users})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@ -156,6 +156,12 @@
|
|||||||
background-color: var(--danger);
|
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 {
|
.table-checkbox-control-label::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0.25rem;
|
top: 0.25rem;
|
||||||
|
|||||||
@ -14,9 +14,9 @@ $(document).ready(function () {
|
|||||||
|
|
||||||
$("#delete-all-checkbox").change(function () {
|
$("#delete-all-checkbox").change(function () {
|
||||||
if (document.getElementById('delete-all-checkbox').checked) {
|
if (document.getElementById('delete-all-checkbox').checked) {
|
||||||
$('.delete-checkbox').prop("checked", true);
|
$('.multiple-select-checkbox').prop("checked", true);
|
||||||
} else {
|
} else {
|
||||||
$('.delete-checkbox').prop("checked", false);
|
$('.multiple-select-checkbox').prop("checked", false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -10,7 +10,7 @@
|
|||||||
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
|
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
|
||||||
{{ mform.text_input(form.name) }}
|
{{ mform.text_input(form.name) }}
|
||||||
{{ form.members.label }}
|
{{ 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">
|
<div class="d-flex mt-4">
|
||||||
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
|
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
|
||||||
<a href="{{ url('realm-group-list', args = [realm.id]) }}"
|
<a href="{{ url('realm-group-list', args = [realm.id]) }}"
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
|
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
|
||||||
{{ mform.text_input(form.name) }}
|
{{ mform.text_input(form.name) }}
|
||||||
{{ form.members.label }}
|
{{ 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">
|
<div class="d-flex mt-4">
|
||||||
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
|
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
|
||||||
<a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}"
|
<a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}"
|
||||||
|
|||||||
@ -286,4 +286,46 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</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 %}
|
{% endmacro %}
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
class="table-checkbox-control-input delete-checkbox"
|
class="table-checkbox-control-input multiple-select-checkbox"
|
||||||
id="user_{{ loop.index }}"
|
id="user_{{ loop.index }}"
|
||||||
value="{{ user.username }}"
|
value="{{ user.username }}"
|
||||||
name="ldap_users"
|
name="ldap_users"
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
class="table-checkbox-control-input delete-checkbox"
|
class="table-checkbox-control-input multiple-select-checkbox"
|
||||||
id="user_{{ loop.index }}"
|
id="user_{{ loop.index }}"
|
||||||
value="{{ user.username }}"
|
value="{{ user.username }}"
|
||||||
name="ldap_users"
|
name="ldap_users"
|
||||||
|
|||||||
Reference in New Issue
Block a user