X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=xnet%2Fgroups%2Fdecorators.py;h=189da828a18eb9a5a2a541d1460d85ff9a420849;hb=81d228199aa186c4317a6919f3b0bb0be53d6baa;hp=4e94ef235deef30558e0845012e56ad4095446e3;hpb=95fa5c138ee65686c6dd142b45f87183b0397f30;p=xnet diff --git a/xnet/groups/decorators.py b/xnet/groups/decorators.py index 4e94ef2..189da82 100644 --- a/xnet/groups/decorators.py +++ b/xnet/groups/decorators.py @@ -1,7 +1,8 @@ import functools -from django.http import HttpResponseForbidden +from django.contrib.auth.views import redirect_to_login from django.shortcuts import get_object_or_404 +import django.views.defaults from .models import XGroup, Membership @@ -49,16 +50,24 @@ class group_required(object): def wrapped_view_func(request, group_slug, *args, **kwargs): group = get_object_or_404(XGroup, short=group_slug) if not request.user.is_authenticated(): - return HttpResponseForbidden() + return redirect_to_login(request.build_absolute_uri()) - try: - membership = request.user.memberships.get( + # A superuser is admin of every group, but there is no membership in the database + if request.user.is_superuser: + membership = Membership( xgroup=group, - level__gte=self.level, - state='enabled', - ) - except Membership.DoesNotExist: - membership = None + user=request.user, + level=Membership.LEVEL_ADMIN, + state='enabled') + else: + try: + membership = request.user.memberships.get( + xgroup=group, + level__gte=self.level, + state='enabled', + ) + except Membership.DoesNotExist: + membership = None request.group = group request.membership = membership @@ -66,5 +75,5 @@ class group_required(object): if membership: return view_func(request, group, *args, membership=membership, **kwargs) else: - return HttpResponseForbidden() + return django.views.defaults.permission_denied(request) return wrapped_view_func