Реализовал систему разрешений

This commit is contained in:
2025-12-15 11:45:25 +03:00
parent ca7709ebff
commit 46dc79b93f
33 changed files with 1340 additions and 124 deletions

View File

@@ -17,6 +17,7 @@ from django.views import View
from ..forms import SourceForm
from ..models import Source, Satellite
from ..utils import format_coords_display, parse_pagination_params
from ..permissions import PermissionRequiredMixin, permission_required
class SourceListView(LoginRequiredMixin, View):
@@ -818,7 +819,10 @@ class SourceListView(LoginRequiredMixin, View):
class AdminModeratorMixin(UserPassesTestMixin):
"""Mixin to restrict access to admin and moderator roles only."""
"""Mixin to restrict access to admin and moderator roles only.
DEPRECATED: Use PermissionRequiredMixin instead for granular permissions.
"""
def test_func(self):
return (
@@ -832,8 +836,9 @@ class AdminModeratorMixin(UserPassesTestMixin):
return redirect('mainapp:source_list')
class SourceCreateView(LoginRequiredMixin, AdminModeratorMixin, View):
class SourceCreateView(LoginRequiredMixin, PermissionRequiredMixin, View):
"""View for creating new Source."""
permission_required = 'source_create'
def get(self, request):
form = SourceForm()
@@ -874,8 +879,9 @@ class SourceCreateView(LoginRequiredMixin, AdminModeratorMixin, View):
return render(request, 'mainapp/source_form.html', context)
class SourceUpdateView(LoginRequiredMixin, AdminModeratorMixin, View):
class SourceUpdateView(LoginRequiredMixin, PermissionRequiredMixin, View):
"""View for editing Source with 4 coordinate fields and related ObjItems."""
permission_required = 'source_edit'
def get(self, request, pk):
source = get_object_or_404(Source, pk=pk)
@@ -945,8 +951,9 @@ class SourceUpdateView(LoginRequiredMixin, AdminModeratorMixin, View):
return render(request, 'mainapp/source_form.html', context)
class SourceDeleteView(LoginRequiredMixin, AdminModeratorMixin, View):
class SourceDeleteView(LoginRequiredMixin, PermissionRequiredMixin, View):
"""View for deleting Source."""
permission_required = 'source_delete'
def get(self, request, pk):
source = get_object_or_404(Source, pk=pk)
@@ -975,8 +982,9 @@ class SourceDeleteView(LoginRequiredMixin, AdminModeratorMixin, View):
return redirect('mainapp:source_list')
class DeleteSelectedSourcesView(LoginRequiredMixin, AdminModeratorMixin, View):
class DeleteSelectedSourcesView(LoginRequiredMixin, PermissionRequiredMixin, View):
"""View for deleting multiple selected sources with confirmation."""
permission_required = 'source_delete'
def get(self, request):
"""Show confirmation page with details about sources to be deleted."""
@@ -1062,8 +1070,9 @@ class DeleteSelectedSourcesView(LoginRequiredMixin, AdminModeratorMixin, View):
class MergeSourcesView(LoginRequiredMixin, AdminModeratorMixin, View):
class MergeSourcesView(LoginRequiredMixin, PermissionRequiredMixin, View):
"""View for merging multiple sources into one."""
permission_required = 'source_merge'
def post(self, request):
"""Merge selected sources into the first one."""