mirror of
https://github.com/thecyberlearn/modern-django-starter.git
synced 2026-08-18 13:32:55 +00:00
✨ Features: - Complete Django project with authentication - Email/password and social login (Google, Facebook) - Role-based access control (admin, staff, user) - Docker and Docker Compose setup - Production-ready configuration - Static file handling with WhiteNoise - PostgreSQL database integration - Comprehensive documentation - GitHub CI/CD workflows - Dokploy deployment configuration 🚀 Ready for deployment on Dokploy, Heroku, Railway, and other platforms
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
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') |