from django.shortcuts import render from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.views.generic import TemplateView from django.http import HttpResponseForbidden def home(request): return render(request, 'home.html') class HomeView(TemplateView): template_name = 'home.html' class AdminRequiredMixin(UserPassesTestMixin): def test_func(self): return self.request.user.has_role('admin') class StaffRequiredMixin(UserPassesTestMixin): def test_func(self): return self.request.user.has_role('staff') or self.request.user.has_role('admin') def admin_required(function): def wrap(request, *args, **kwargs): if request.user.has_role('admin'): return function(request, *args, **kwargs) else: return HttpResponseForbidden('Admin access required') return wrap def staff_required(function): def wrap(request, *args, **kwargs): if request.user.has_role('staff') or request.user.has_role('admin'): return function(request, *args, **kwargs) else: return HttpResponseForbidden('Staff access required') return wrap @login_required @admin_required def admin_dashboard(request): return render(request, 'admin_dashboard.html') @login_required @staff_required def staff_dashboard(request): return render(request, 'staff_dashboard.html')