4e94ef235deef30558e0845012e56ad4095446e3
3 from django
.http
import HttpResponseForbidden
4 from django
.shortcuts
import get_object_or_404
6 from .models
import XGroup
, Membership
9 def with_group(view_func
):
10 """Converts a group slug into a XGroup object.
14 ... def my_view(request, group, *args, **kwargs):
15 ... # group is now a XGroup instance
18 @functools.wraps(view_func
)
19 def wrapped_view_func(request
, group_slug
, *args
, **kwargs
):
20 group
= get_object_or_404(XGroup
, short
=group_slug
)
24 return view_func(request
, group
, *args
, **kwargs
)
26 return wrapped_view_func
29 class group_required(object):
30 """Force a minimum group membership level.
32 Also combines with_group features:
33 - fetches the XGroup object,
35 - sets request.membership
39 >>> @group_required(level=Membership.LEVEL_MEMBER)
40 ... def my_view(request, group, *args, **kwargs):
44 def __init__(self
, level
=Membership
.LEVEL_MEMBER
):
47 def __call__(self
, view_func
):
48 @functools.wraps(view_func
)
49 def wrapped_view_func(request
, group_slug
, *args
, **kwargs
):
50 group
= get_object_or_404(XGroup
, short
=group_slug
)
51 if not request
.user
.is_authenticated():
52 return HttpResponseForbidden()
55 membership
= request
.user
.memberships
.get(
57 level__gte
=self
.level
,
60 except Membership
.DoesNotExist
:
64 request
.membership
= membership
67 return view_func(request
, group
, *args
, membership
=membership
, **kwargs
)
69 return HttpResponseForbidden()
70 return wrapped_view_func