infrasynth-backend-kit/infrasynth/notifications/views.py
jcv-dev a2930426b4 feat: tenant configs, live signals, and automatic permission management
- infrasynth.configs: typed multi-tenant config store (registry, service,
  secrets, cache) + public config_changed/config_reset signals and API
- emit the declared-but-dead signals (features flags/overrides, scheduler
  task_completed/task_failed, tenancy tenant_updated, audit model_changed)
  and per-model audit field exclusions
- security: permission catalog (security_permission), Django-style
  model-derived AutoPermission, PermissionRegistry, RoleAssignment,
  global-or-tenant Grant/Revoke, catalog API
- consolidate the permission surface: PermissionRegistry only (drop the
  settings dict), IsAuthenticatedAndPermitted aliases HybridPermission,
  require_permission replaced by required_permissions + require_all
- packaging: add [build-system]; add Forgejo publish workflow (.forgejo)
2026-09-29 17:06:54 -05:00

45 lines
1.5 KiB
Python

from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
from infrasynth.security.permissions import IsAuthenticatedAndPermitted
from .filters import (
ChannelConfigFilter,
NotificationDispatchFilter,
NotificationTemplateFilter,
)
from .models import ChannelConfig, NotificationDispatch, NotificationTemplate
from .serializers import (
ChannelConfigSerializer,
NotificationDispatchSerializer,
NotificationTemplateSerializer,
)
class NotificationTemplateViewSet(ModelViewSet):
queryset = NotificationTemplate.objects.all()
serializer_class = NotificationTemplateSerializer
permission_classes = [IsAuthenticatedAndPermitted]
filterset_class = NotificationTemplateFilter
def get_queryset(self):
return NotificationTemplate.objects.all()
class NotificationDispatchViewSet(ReadOnlyModelViewSet):
queryset = NotificationDispatch.objects.select_related("template")
serializer_class = NotificationDispatchSerializer
permission_classes = [IsAuthenticatedAndPermitted]
filterset_class = NotificationDispatchFilter
def get_queryset(self):
return NotificationDispatch.objects.select_related("template")
class ChannelConfigViewSet(ModelViewSet):
queryset = ChannelConfig.objects.all()
serializer_class = ChannelConfigSerializer
permission_classes = [IsAuthenticatedAndPermitted]
filterset_class = ChannelConfigFilter
def get_queryset(self):
return ChannelConfig.objects.all()