+from functools import wraps
+
+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