/
decorators.py
55 lines (36 loc) · 1.43 KB
/
decorators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# -*- coding: utf-8 -*-
from functools import wraps
from django.core.exceptions import PermissionDenied
from django.contrib.auth.views import redirect_to_login
from spirit.core.conf import settings
from spirit.core.utils.http import safe_redirect
def moderator_required(view_func):
@wraps(view_func)
def wrapper(request, *args, **kwargs):
user = request.user
if not user.is_authenticated:
return redirect_to_login(next=request.get_full_path(),
login_url=settings.LOGIN_URL)
if not user.st.is_moderator:
raise PermissionDenied
return view_func(request, *args, **kwargs)
return wrapper
def administrator_required(view_func):
@wraps(view_func)
def wrapper(request, *args, **kwargs):
user = request.user
if not user.is_authenticated:
return redirect_to_login(next=request.get_full_path(),
login_url=settings.LOGIN_URL)
if not user.st.is_administrator:
raise PermissionDenied
return view_func(request, *args, **kwargs)
return wrapper
def guest_only(view_func):
# TODO: test!
@wraps(view_func)
def wrapper(request, *args, **kwargs):
if request.user.is_authenticated:
return safe_redirect(request, 'next', request.user.st.get_absolute_url())
return view_func(request, *args, **kwargs)
return wrapper