diff --git a/module_iam/permission.py b/module_iam/permission.py index e15474b..54ac70a 100644 --- a/module_iam/permission.py +++ b/module_iam/permission.py @@ -1,5 +1,6 @@ from functools import wraps from django.core.exceptions import PermissionDenied +from django.shortcuts import render from . import models from django.db.models import Q # import logging @@ -69,7 +70,7 @@ class ResourcePermissionRequiredMixin: def dispatch(self, request, *args, **kwargs): if not self.has_resource_permission(request.user, self.resource): # logger.warning(f"Permission denied for user {request.user} accessing {self.resource}:{self.action}") - raise PermissionDenied("You do not have permission to access this resource.") + return render(request, "module_iam/permission_denied.html") return super().dispatch(request, *args, **kwargs) @classmethod @@ -80,7 +81,7 @@ class ResourcePermissionRequiredMixin: instance = cls() instance.resource = resource if not instance.has_resource_permission(request.user, instance.resource): - raise PermissionDenied("You do not have permission to access this resource.") + return render(request, "module_iam/permission_denied.html") return view_func(request, *args, **kwargs) return _wrapped_view return decorator diff --git a/module_project/settings/base.py b/module_project/settings/base.py index 1ce27be..fd06e8f 100644 --- a/module_project/settings/base.py +++ b/module_project/settings/base.py @@ -32,7 +32,7 @@ if READ_DOT_ENV_FILE: SECRET_KEY = env.str("SECRET_KEY") # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = env.bool("DJANGO_DEBUG", True) +DEBUG = env.bool("DJANGO_DEBUG", False) ALLOWED_HOSTS = [] diff --git a/module_project/urls.py b/module_project/urls.py index 16d785a..423a6d0 100644 --- a/module_project/urls.py +++ b/module_project/urls.py @@ -17,8 +17,18 @@ Including another URLconf from django.conf import settings from django.conf.urls.static import static from django.contrib import admin +from django.shortcuts import render from django.urls import include, path +def handler404(request, exception): + if request.user.is_authenticated: + print("True") + return render(request, '404.html') + else: + print("False") + return render(request, '1404.html') + + urlpatterns = [ path('admin/', admin.site.urls), @@ -40,8 +50,13 @@ urlpatterns = [ path('api/notification/', include("module_notification.api.urls")), ] +# handler404 = handler404 + if settings.DEBUG: import debug_toolbar urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += [path('__debug__/', include(debug_toolbar.urls))] + +if not settings.DEBUG: + handler404 = handler404 diff --git a/static/src/assets/img/404-page.gif b/static/src/assets/img/404-page.gif new file mode 100644 index 0000000..95719f2 Binary files /dev/null and b/static/src/assets/img/404-page.gif differ diff --git a/templates/1404.html b/templates/1404.html new file mode 100644 index 0000000..039de0a --- /dev/null +++ b/templates/1404.html @@ -0,0 +1,61 @@ + + +
+ + + +Page not found. You can + go back + to the previous page, or + return home.
+ +