26 lines
769 B
Python
26 lines
769 B
Python
from functools import wraps
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.core.exceptions import PermissionDenied
|
|
|
|
from issue.models import Project
|
|
|
|
|
|
def project_perm_required(perm):
|
|
|
|
def decorator(view):
|
|
@wraps(view)
|
|
def wrapper(request, *args, **kwargs):
|
|
if '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():
|
|
raise PermissionDenied()
|
|
else:
|
|
return login_required(view)(request, *args, **kwargs)
|
|
return wrapper
|
|
|
|
return decorator
|