Implement default group, Close #24

This commit is contained in:
Götz 2019-04-11 00:38:17 +02:00
parent 66c7485028
commit 464c16f55c
7 changed files with 50 additions and 23 deletions

View File

@ -6,7 +6,8 @@ from django.db import models
class Realm(models.Model):
name = models.CharField(max_length=200, unique=True)
email = models.CharField(max_length=200)
admin_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True)
admin_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True, related_name='admin_groups')
default_group = models.ForeignKey(Group, models.PROTECT, blank=True, null=True, related_name='default_groups')
ldap_base_dn = models.CharField(max_length=400, unique=True)
def __str__(self):

View File

@ -6,7 +6,7 @@ from django.forms import modelformset_factory
class AddLDAPUserForm(forms.Form):
username = forms.CharField(label='Nutzername', max_length=400)
email = forms.EmailField(label='E-Mail', required=False)
email = forms.EmailField(label='E-Mail')
class AdminUpdateLDAPUserForm(forms.Form):
@ -58,7 +58,10 @@ class RealmUpdateForm(forms.Form):
name = forms.CharField(label='Bereichsname', max_length=200)
admin_group = forms.ModelChoiceField(label='Admin Gruppe',
help_text="Die Mitglieder dieser Gruppe darf den Bereich administieren",
queryset=LdapGroup.objects.all())
queryset=LdapGroup.objects.all(), required=False)
default_group = forms.ModelChoiceField(label='Default Gruppe',
help_text="Diese Gruppe wird jedem User der neu erstellt wird hinzugefügt werden",
queryset=LdapGroup.objects.all(), required=False)
UserFormset = modelformset_factory(

View File

@ -73,26 +73,44 @@ def realm_detail(request, realm_id):
@is_realm_admin
def realm_update(request, realm_id):
if request.user.is_superuser:
realm_obj = Realm.objects.get(id=realm_id)
data = {'id': realm_obj.id, 'ldap_base_dn': realm_obj.ldap_base_dn, 'name': realm_obj.name,
'email': realm_obj.email,
'admin_group': realm_obj.admin_group}
realm = Realm.objects.get(id=realm_id)
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
ldap_admin_group = None
if realm.admin_group:
ldap_admin_group = LdapGroup.objects.get(name=realm.admin_group.name)
ldap_default_group = None
if realm.default_group:
ldap_default_group = LdapGroup.objects.get(name=realm.default_group.name)
data = {'id': realm.id,
'ldap_base_dn': realm.ldap_base_dn,
'name': realm.name,
'email': realm.email,
'admin_group': ldap_admin_group,
'default_group': ldap_default_group}
if request.method == 'POST':
form = RealmUpdateForm(request.POST)
if form.is_valid():
realm_obj.name = form.cleaned_data['name']
realm_obj.ldap_base_dn = form.cleaned_data['ldap_base_dn']
realm_obj.email = form.cleaned_data['email']
realm.name = form.cleaned_data['name']
realm.ldap_base_dn = form.cleaned_data['ldap_base_dn']
realm.email = form.cleaned_data['email']
admin_ldap_group = form.cleaned_data['admin_group']
realm_obj.admin_group, _ = Group.objects.get_or_create(name=admin_ldap_group.name)
realm_obj.save()
return redirect('realm-detail', realm_obj.id)
if admin_ldap_group:
realm.admin_group, _ = Group.objects.get_or_create(name=admin_ldap_group.name)
else:
realm.admin_group = None
default_ldap_group = form.cleaned_data['default_group']
if default_ldap_group:
realm.default_group, _ = Group.objects.get_or_create(name=default_ldap_group.name)
else:
realm.default_group = None
realm.save()
return redirect('realm-detail', realm.id)
else:
form = RealmUpdateForm(initial=data)
return render(request, 'realm/realm_update.jinja2', {'realm': realm_obj, 'form': form})
return render(request, 'realm/realm_update.jinja2', {'realm': realm, 'form': form})
else:
realm_obj = Realm.objects.get(id=realm_id)
return render(request, 'realm/realm_update.jinja2', {'realm': realm_obj})
realm = Realm.objects.get(id=realm_id)
return render(request, 'realm/realm_update.jinja2', {'realm': realm})
def realm_delete(request, realm_id):

View File

@ -39,7 +39,7 @@ def realm_user_detail(request, realm_id, user_dn):
@login_required
@is_realm_admin
def user_add(request, realm_id):
realm_obj = Realm.objects.get(id=realm_id)
realm = Realm.objects.get(id=realm_id)
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
@ -52,18 +52,22 @@ def user_add(request, realm_id):
protocol = 'http'
if request.is_secure():
protocol = 'https'
LdapUser.base_dn = f'ou=people,{realm_obj.ldap_base_dn}'
LdapUser.create_with_django_user_creation_and_welcome_mail(realm=realm_obj,
LdapUser.base_dn = f'ou=people,{realm.ldap_base_dn}'
LdapUser.create_with_django_user_creation_and_welcome_mail(realm=realm,
protocol=protocol,
domain=current_site.domain,
username=username,
email=email)
user = LdapUser.objects.get(username=username)
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
default_ldap_group = LdapGroup.objects.get(name=realm.default_group.name)
ldap_add_user_to_groups(ldap_user=user.dn, user_groups=[default_ldap_group, ])
return redirect('realm-user-list', realm_id)
# if a GET (or any other method) we'll create a blank form
else:
form = AddLDAPUserForm()
return render(request, 'user/realm_user_add.jinja2', {'form': form, 'realm': realm_obj})
return render(request, 'user/realm_user_add.jinja2', {'form': form, 'realm': realm})
@login_required

View File

@ -166,7 +166,7 @@
{% endmacro %}
{% macro select_input(field, multiple=False) -%}
<div class="form-group">
<div class="">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
<select
{% if multiple %}multiple{% endif %}

View File

@ -29,7 +29,7 @@
<li class="list-group-item">Admin Gruppe: <span class="text-warning">Noch ausstehend</span></li>
{% endif %}
{% if realm.default_group %}
<li class="list-group-item">Default Gruppe: {{ realm.admin_group }}</li>
<li class="list-group-item">Default Gruppe: {{ realm.default_group }}</li>
{% else %}
<li class="list-group-item">Default Gruppe: <span class="text-warning">Noch ausstehend</span>
</li>

View File

@ -8,7 +8,8 @@
{{ mform.text_input(form.ldap_base_dn) }}
{{ mform.text_input(form.name) }}
{{ mform.email_input(form.email) }}
{{ mform.text_input(form.admin_group) }}
{{ mform.select_input(form.admin_group) }}
{{ mform.select_input(form.default_group) }}
<div class="d-flex mt-4">
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button>
<a href="{{ url('realm-detail', args = [realm.id]) }}"