825df8d5732e07f1853aff9389b595c6487d9071
[xnet] / xnet / accounts / decorators.py
1 import functools
2
3 from django.http import HttpResponseForbidden
4 from django.shortcuts import get_object_or_404
5
6 from .models import XGroup, Membership
7
8
9 class group_required(object):
10 def __init__(self, level=Membership.LEVEL_MEMBER):
11 self.level = level
12
13 def __call__(self, view_func):
14 @functools.wraps(view_func)
15 def wrapped_view_func(request, group_id, *args, **kwargs):
16 group = get_object_or_404(XGroup, pk=group_id)
17 membership = request.user.memberships.filter(
18 xgroup=group,
19 level__gte=self.level,
20 state='enabled',
21 )
22 if membership.exists():
23 return view_func(request, group, *args, membership=membership[0], **kwargs)
24 else:
25 return HttpResponseForbidden()
26 return wrapped_view_func