From 56076ab39161887a388ba896129b58cf2857e60e Mon Sep 17 00:00:00 2001 From: Klafyvel Date: Fri, 2 Mar 2018 11:16:42 +0100 Subject: [PATCH] Ajout/suppression d'admin du site --- settings/forms.py | 19 ++++++++++++ settings/templates/settings/settings.html | 34 ++++++++++++++++++++++ settings/urls.py | 13 ++++++++- settings/views.py | 35 ++++++++++++++++++++++- 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 settings/forms.py diff --git a/settings/forms.py b/settings/forms.py new file mode 100644 index 0000000..1fc815e --- /dev/null +++ b/settings/forms.py @@ -0,0 +1,19 @@ +from django import forms +from django.contrib.auth.models import User, Group +from django.shortcuts import get_object_or_404 + +class SelectUserForm(forms.Form): + pk = forms.ChoiceField( + label="Utilisateur", + help_text="Sera ajouté aux administrateurs du site.", + validators=[], + ) + + def get_user(self): + pk = self.cleaned_data['pk'] + return get_object_or_404(User, pk=pk) + + def populate(self): + admins,_ = Group.objects.get_or_create(name='admins') + choices = [(u.pk, u.first_name + ' ' + u.last_name + '(' + u.username + ')') for u in User.objects.all()] + self.fields['pk'].choices = choices diff --git a/settings/templates/settings/settings.html b/settings/templates/settings/settings.html index e32510e..e85d7c9 100644 --- a/settings/templates/settings/settings.html +++ b/settings/templates/settings/settings.html @@ -1,6 +1,40 @@ {% extends "base.html" %} {% block content %}

Page d'administration du site

+

Administrateurs du site

+ + + Ajouter un administrateur + +
+
+ + + + + + + + + + + {% for admin in administrators %} + + + + + + + {% endfor %} + +
PrénomNomPseudo
{{admin.first_name}}{{admin.last_name}}{{admin.username}} + + + Enlever le privilège Administrateur + +
+
+

Liste des catégories

diff --git a/settings/urls.py b/settings/urls.py index 2504f22..9293762 100644 --- a/settings/urls.py +++ b/settings/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from .views import SettingsView, EditSiteSettingsView +from .views import SettingsView, EditSiteSettingsView, degrade_user, promote_user app_name = 'settings' urlpatterns = [ @@ -13,4 +13,15 @@ urlpatterns = [ EditSiteSettingsView.as_view(), name='site-settings' ), + path( + 'degrade_user/', + degrade_user, + name='degrade-user', + ), + path( + 'promote_user', + promote_user, + name='promote-user', + ) + ] diff --git a/settings/views.py b/settings/views.py index 4f63b6c..bd54782 100644 --- a/settings/views.py +++ b/settings/views.py @@ -1,9 +1,15 @@ from django.views.generic import TemplateView, UpdateView -from django.urls import reverse_lazy +from django.urls import reverse_lazy, reverse from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin +from django.contrib.auth.decorators import permission_required +from django.contrib.auth.models import Group, User +from django.shortcuts import get_object_or_404, redirect, render +from django.contrib import messages + from content.models import Category from users.models import SchoolProfile from .models import SiteSettings +from .forms import SelectUserForm class SettingsView(LoginRequiredMixin, PermissionRequiredMixin, TemplateView): @@ -16,6 +22,7 @@ class SettingsView(LoginRequiredMixin, PermissionRequiredMixin, TemplateView): context['site_settings'], _ = SiteSettings.objects.get_or_create() context['schools'] = SchoolProfile.objects.all() context['settings'] = True + context['administrators'] = Group.objects.get(name='admins').user_set.all() return context class EditSiteSettingsView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView): @@ -35,3 +42,29 @@ class EditSiteSettingsView(LoginRequiredMixin, PermissionRequiredMixin, UpdateVi return context +@permission_required('auth.change_user') +def degrade_user(request, pk): + user = get_object_or_404(User, pk=pk) + admins,_ = Group.objects.get_or_create(name='admins') + user.groups.remove(admins) + user.save() + messages.success(request, user.username + ' a été enlevé des administrateurs du site') + return redirect(reverse('settings:index')) + + +@permission_required('auth.change_user') +def promote_user(request): + user_form = SelectUserForm(request.POST or None) + user_form.populate() + if user_form.is_valid(): + user=user_form.get_user() + admins,_ = Group.objects.get_or_create(name='admins') + user.groups.add(admins) + user.save() + messages.success(request, user.username + ' a été ajouté des administrateurs du site') + return redirect(reverse('settings:index')) + return render(request, 'edit.html', { + 'form' : user_form, + 'title' : "Ajout d'un administrateur", + 'validate' : "Ajouter" + })