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