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