perm checked using a decorator instead of shortcut
This commit is contained in:
parent
28a4915909
commit
53e954ca9c
2 changed files with 25 additions and 11 deletions
25
issue/decorators.py
Normal file
25
issue/decorators.py
Normal 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
|
|
@ -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())
|
|
Loading…
Add table
Add a link
Reference in a new issue