group_required decorator
[xnet] / xnet / accounts / decorators.py
1 from functools import wraps
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 def group_required(view_func, level=Membership.LEVEL_MEMBER):
10 @wraps(view_func)
11 def _wrapped_view_func(request, group_id, *args, **kwargs):
12 group = get_object_or_404(XGroup, pk=group_id)
13 if request.user.memberships.filter(
14 xgroup=group,
15 level__gte=level,
16 state='enabled',
17 ).exists():
18 return view_func(request, group, *args, **kwargs)
19 else:
20 return HttpResponseForbidden()
21 return _wrapped_view_func