diff --git a/apps/common/templates/403.html b/apps/common/templates/403.html
new file mode 100644
index 0000000000..86ceb04dcf
--- /dev/null
+++ b/apps/common/templates/403.html
@@ -0,0 +1,12 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% block title %} :: {% blocktrans %}Insufficient permissions{% endblocktrans %}{% endblock %}
+
+{% block content %}
+
+
{% blocktrans %}Insufficient permissions{% endblocktrans %}
+
+
{% blocktrans %}You don't have enough permissions for this operation.{% endblocktrans %}
+
+
+{% endblock %}
diff --git a/apps/common/templates/404.html b/apps/common/templates/404.html
index 2cea36e3c0..0c76c0560c 100644
--- a/apps/common/templates/404.html
+++ b/apps/common/templates/404.html
@@ -1,10 +1,10 @@
{% extends "base.html" %}
{% load i18n %}
-{% block title %}{% trans "Page not found" %}{% endblock %}
+{% block title %} :: {% blocktrans %}Page not found{% endblocktrans %}{% endblock %}
{% block content %}
-
{% blocktrans %}Page not found or insufficient permissions.{% endblocktrans %}
+
{% blocktrans %}Page not found{% endblocktrans %}
{% blocktrans %}Sorry, but the requested page could not be found.{% endblocktrans %}
diff --git a/apps/permissions/middleware/__init__.py b/apps/permissions/middleware/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/apps/permissions/middleware/permissiondeniedmiddleware.py b/apps/permissions/middleware/permissiondeniedmiddleware.py
new file mode 100644
index 0000000000..939fbc8195
--- /dev/null
+++ b/apps/permissions/middleware/permissiondeniedmiddleware.py
@@ -0,0 +1,43 @@
+from django.conf import settings
+from django.core.exceptions import PermissionDenied
+from django.http import HttpResponseForbidden
+from django.template import RequestContext, Template, loader, TemplateDoesNotExist
+from django.utils.importlib import import_module
+
+#http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/
+class PermissionDeniedMiddleware(object):
+ def process_exception(self, request, exception):
+ if isinstance(exception, PermissionDenied):
+ if settings.DEBUG==123:
+ raise PermissionDenied
+ else:
+ try:
+ # Handle import error but allow any type error from view
+ callback = getattr(import_module(settings.ROOT_URLCONF),'handler403')
+ return callback(request,exception)
+ except (ImportError,AttributeError):
+ # Try to get a 403 template
+ try:
+ # First look for a user-defined template named "403.html"
+ t = loader.get_template('403.html')
+ except TemplateDoesNotExist:
+ # If a template doesn't exist in the projct, use the following hardcoded template
+ t = Template("""{% load i18n %}
+
+
+
+
{% trans "403 ERROR: Access denied" %}
+
+
+
{% trans "Access Denied (403)" %}
+ {% trans "We're sorry, but you are not authorized to view this page." %}
+
+ """)
+
+ # Now use context and render template
+ c = RequestContext(request, {
+ 'message': exception.message
+ })
+
+ return HttpResponseForbidden(t.render(c))
diff --git a/apps/permissions/templatetags/permission_tags.py b/apps/permissions/templatetags/permission_tags.py
index d4168af744..31eb2b60eb 100644
--- a/apps/permissions/templatetags/permission_tags.py
+++ b/apps/permissions/templatetags/permission_tags.py
@@ -1,7 +1,8 @@
+from django.core.exceptions import PermissionDenied
from django.template import TemplateSyntaxError, Library, \
VariableDoesNotExist, Node, Variable
-from permissions.api import check_permissions as check_permission_function, Unauthorized
+from permissions.api import check_permissions as check_permission_function
register = Library()
@@ -20,7 +21,7 @@ class CheckPermissionsNode(Node):
check_permission_function(requester, namespace, permission_list)
context['permission'] = True
return ''
- except Unauthorized:
+ except PermissionDenied:
context['permission'] = False
return ''
diff --git a/settings.py b/settings.py
index ff299cbff7..ab74642e24 100644
--- a/settings.py
+++ b/settings.py
@@ -98,6 +98,7 @@ MIDDLEWARE_CLASSES = (
'common.middleware.login_required_middleware.LoginRequiredMiddleware',
'pagination.middleware.PaginationMiddleware',
'common.middleware.strip_spaces_widdleware.SpacelessMiddleware',
+ 'permissions.middleware.permissiondeniedmiddleware.PermissionDeniedMiddleware',
)
ROOT_URLCONF = 'urls'