From a17cc97b89ca34a4364fbbc6276be63697472923 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Mon, 13 Feb 2012 23:32:22 +0100 Subject: [PATCH] Fixes message when not in group, NOT DRY --- main/auth.py | 14 ++++++++++++++ main/decorators.py | 16 ---------------- main/urls.py | 16 ++-------------- main/views.py | 35 ++++++++++++++++++++++++++++------- 4 files changed, 44 insertions(+), 37 deletions(-) create mode 100644 main/auth.py delete mode 100644 main/decorators.py diff --git a/main/auth.py b/main/auth.py new file mode 100644 index 0000000..92dee30 --- /dev/null +++ b/main/auth.py @@ -0,0 +1,14 @@ +from django.conf import settings +from django.contrib import messages + +def in_groups(request): + if request.user.is_authenticated(): + #settings.GROUPS_ALLOWED + if bool(request.user.groups.filter(name__in=settings.GROUPS_ALLOWED)) or request.user.is_superuser: + return True + # Gi brukeren beskjed (muligens) + message = "Jeg kan ikke gi deg tilgang fordi \ + du er ikke i noen av disse gruppene: {0}.".format( + ", ".join(settings.GROUPS_ALLOWED)) + messages.info(request, message=message) + return False diff --git a/main/decorators.py b/main/decorators.py deleted file mode 100644 index fc705c1..0000000 --- a/main/decorators.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.conf import settings -from django.contrib.auth.decorators import user_passes_test - -def groups_required(*group_names): - """Requires user membership in at least one of the groups passed in.""" - def in_groups(u): - if u.is_authenticated(): - if bool(u.groups.filter(name__in=group_names)) or u.is_superuser: - return True - # Gi brukeren beskjed (muligens) - #message = "Jeg kan ikke gi deg tilgang fordi \ - # du er ikke i noen av disse gruppene: {0}.".format( - # ", ".join(settings.GROUPS_ALLOWED)) - #messages.create(message=message) - return False - return user_passes_test(in_groups) diff --git a/main/urls.py b/main/urls.py index c755b8f..542216d 100644 --- a/main/urls.py +++ b/main/urls.py @@ -1,28 +1,16 @@ from datetime import datetime from django.conf.urls.defaults import patterns, include, url -from django.views.generic.list_detail import object_list from django.contrib.auth.decorators import login_required from django.conf import settings from models import * -from decorators import groups_required - urlpatterns = patterns('main.views', url(r'^system/$', 'system', name='system'), url(r'^new/$', 'new', name='new'), url(r'^new/created/$', 'new_created', name='new_created'), - url(r'^list/page(?P[0-9]+)/$', - groups_required(settings.GROUPS_ALLOWED)(login_required(object_list)), { - 'queryset': TempUserLog.objects.filter(expires__gt=datetime.now()).order_by('created').reverse(), - 'template_name':'private/list.html' - }, name='list_page'), - url(r'^list/', - groups_required(settings.GROUPS_ALLOWED)(login_required(object_list)), { - 'queryset': TempUserLog.objects.filter(expires__gt=datetime.now()).order_by('created').reverse(), - 'template_name':'private/list.html' - }, - name='list_users'), + url(r'^list/page(?P[0-9]+)/$', 'list', name='list_page'), + url(r'^list/','list', name='list_users'), url(r'^download/(?P[0-9]+)/pdf$', 'download_pdf', name='download_pdf') ) diff --git a/main/views.py b/main/views.py index 94039a7..ab4a7a2 100644 --- a/main/views.py +++ b/main/views.py @@ -4,7 +4,7 @@ import datetime from django.http import HttpResponse, HttpResponseRedirect from django.conf import settings -from django.contrib.auth import login +from django.contrib.auth import login, logout from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import AuthenticationForm from django.core.exceptions import ObjectDoesNotExist @@ -14,13 +14,13 @@ from django.template import RequestContext from django.views.decorators.csrf import csrf_protect from django.shortcuts import get_object_or_404 from django.contrib import messages +from django.views.generic.list_detail import object_list # override this to get pagination from models import * from radius.models import * from forms import * -import utils -from decorators import groups_required +import utils, auth from pdf import render_to_pdf @@ -38,9 +38,12 @@ def index(request): return render_to_response('public/index.html', locals(), context_instance=RequestContext(request)) -@groups_required(settings.GROUPS_ALLOWED) @login_required def new(request): + if not auth.in_groups(request): + logout(request) + return HttpResponseRedirect( '/accounts/login/' ) + if request.method == "POST": form = TempUserForm(data=request.POST) if form.is_valid(): @@ -76,9 +79,12 @@ def new(request): return render_to_response('private/new.html', locals(), context_instance=RequestContext(request)) -@groups_required(settings.GROUPS_ALLOWED) @login_required def new_created(request): + if not auth.in_groups(request): + logout(request) + return HttpResponseRedirect( '/accounts/login/' ) + # Retrieve the last id from session storage = messages.get_messages(request) msgs = [message for message in storage] @@ -88,15 +94,30 @@ def new_created(request): tempuserlog_id = 0 return render_to_response('private/new_created.html', locals(), context_instance=RequestContext(request)) -@groups_required(settings.GROUPS_ALLOWED) @login_required def system(request): + if not auth.in_groups(request): + logout(request) + return HttpResponseRedirect( '/accounts/login/' ) + return render_to_response('private/system.html', locals(), context_instance=RequestContext(request)) +@login_required +def list(request, page=0): + if not auth.in_groups(request): + logout(request) + return HttpResponseRedirect( '/accounts/login/' ) + + queryset = TempUserLog.objects.filter(expires__gt=datetime.datetime.now()).order_by('created').reverse(), + return render_to_response('private/list.html', locals(), context_instance=RequestContext(request)) + -@groups_required(settings.GROUPS_ALLOWED) @login_required def download_pdf(request, tempuserlog_id=-1): + if not auth.in_groups(request): + logout(request) + return HttpResponseRedirect( '/accounts/login/' ) + log = get_object_or_404(TempUserLog, pk=tempuserlog_id) return render_to_pdf(