diff --git a/issue/decorators.py b/issue/decorators.py new file mode 100644 index 0000000..370111a --- /dev/null +++ b/issue/decorators.py @@ -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 diff --git a/issue/shortcuts.py b/issue/shortcuts.py deleted file mode 100644 index 940d35b..0000000 --- a/issue/shortcuts.py +++ /dev/null @@ -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())