Files
project-managment/apps/core/permissions.py
T
sankalp 18acdde6e5 feat(apps): add role‑based CustomUser admin and ticketing system
- New Features
  * Introduce CustomUser with role field and admin integration
  * Add ProjectMembership model linking users to projects
  * Add Ticket model with status, type, creator, and project relationships
  * Register CustomUser and ProjectMembership in Django admin with list views
  * Add URLs and views for account management and ticket CRUD operations
- Enhancements
  * Provide pagination and filtering for ticket listings
  * Improve admin UI with role‑specific fieldsets
- Bug Fixes  * Remove obsolete serializers and placeholder files
2026-05-27 23:33:20 +05:45

43 lines
1.5 KiB
Python

from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from apps.projects.models import Project
class AdminRequiredMixin(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
return self.request.user.is_admin()
class ClientOrAdminMixin(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
user = self.request.user
return user.is_admin() or user.is_client()
class ProjectMemberMixin(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
pk = self.kwargs.get("pk") or self.kwargs.get("project_pk")
if not pk:
return False
project = get_object_or_404(Project, pk=pk)
return project.members.filter(pk=self.request.user.pk).exists()
class ProjectMemberRequired:
def dispatch(self, request, *args, **kwargs):
project = get_object_or_404(Project, pk=kwargs.get("pk"))
if not project.members.filter(pk=request.user.pk).exists():
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)
def project_membership_required(view_func):
def wrapper(request, *args, **kwargs):
project = get_object_or_404(Project, pk=kwargs.get("pk"))
if not project.members.filter(pk=request.user.pk).exists():
raise PermissionDenied
return view_func(request, *args, **kwargs)
return wrapper