-from functools import wraps
+import functools
from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404
from .models import XGroup, Membership
-def group_required(view_func, level=Membership.LEVEL_MEMBER):
- @wraps(view_func)
- def _wrapped_view_func(request, group_id, *args, **kwargs):
- group = get_object_or_404(XGroup, pk=group_id)
- if request.user.memberships.filter(
- xgroup=group,
- level__gte=level,
- state='enabled',
- ).exists():
- return view_func(request, group, *args, **kwargs)
- else:
- return HttpResponseForbidden()
- return _wrapped_view_func
+class group_required(object):
+ def __init__(self, level=Membership.LEVEL_MEMBER):
+ self.level = level
+
+ def __call__(self, view_func):
+ @functools.wraps(view_func)
+ def wrapped_view_func(request, group_id, *args, **kwargs):
+ group = get_object_or_404(XGroup, pk=group_id)
+ membership = request.user.memberships.filter(
+ xgroup=group,
+ level__gte=self.level,
+ state='enabled',
+ )
+ if membership.exists():
+ return view_func(request, group, *args, membership=membership[0], **kwargs)
+ else:
+ return HttpResponseForbidden()
+ return wrapped_view_func