perm checked using a decorator instead of shortcut

This commit is contained in:
Élie Bouttier 2014-08-11 23:55:12 -07:00
parent 28a4915909
commit 53e954ca9c
2 changed files with 25 additions and 11 deletions

25
issue/decorators.py Normal file
View file

@ -0,0 +1,25 @@
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseForbidden
from issue.models import Project
def project_perm_required(perm):
def decorator(view):
def wrapper(request, *args, **kwargs):
if len(args) > 0 and isinstance(args[0], Project):
project = args[0]
elif 'project' in kwargs.keys():
project = kwargs['project']
else:
project = None
if request.user.has_perm(perm, project):
return view(request, *args, **kwargs)
elif request.user.is_authenticated():
return HttpResponseForbidden()
else:
return login_required(view)(request, *args, **kwargs)
return wrapper
return decorator

View file

@ -1,11 +0,0 @@
from django.contrib.auth.views import redirect_to_login
def permission_granted_or_login(request, perm):
if hasattr(request, 'project'):
project = request.project
else:
project = None
if not request.user.has_perm(perm, project):
return redirect_to_login(request.build_absolute_uri())