| 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_slug, *args, **kwargs): |
| 16 | group = get_object_or_404(XGroup, short=group_slug) |
| 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 |