Skip to content
Snippets Groups Projects
Select Git revision
  • 9c44ca1c4c2f399c63bf2ac77495e67f2e6bac24
  • develop default protected
  • ical-export
  • feature/audit_log
  • fix/index
  • badge-redeem-404
  • 720-schedule_source
  • room-docu
  • chore/event-views
  • 511-schedule-foo-fixed
  • 607-schedule-versions
  • deploy/curl-verbose
  • fix/public-badge-access-rights
  • 445-schedule-redirects
  • 623-wiki-im-baustellenmodus-sollte-mal-als-wiki-admin-trotzdem-seiten-anlegen-bearbeiten-konnen
  • fix/registration_mail_subject
  • feature/conference-query-set
  • feature/568-habitatmanagement
  • feat/unit-integration-tests
  • camp23-prod
  • production
  • prod-2024-12-27_20-15
  • prod-2024-12-27_16-37
  • prod-2024-12-27_16-01
  • prod-2024-12-27_13-29
  • prod-2024-12-27_00-34
  • prod-2024-12-26_21-45
  • prod-2024-12-26_13-12
  • prod-2024-12-26_00-21
  • prod-2024-12-25_21-04
  • prod-2024-12-25_15-54
  • prod-2024-12-25_01-29
  • prod-2024-12-24_14-48
  • prod-2024-12-23_23-39
  • prod-2024-12-22_21-12
  • prod-2024-12-22_17-25
  • prod-2024-12-22_01-34
  • prod-2024-12-22_00-55
  • prod-2024-12-21_13-42
  • prod-2024-12-21_10-44
  • prod-2024-12-20_12-25
41 results

schedulejson.py

Blame
  • Forked from hub / hub
    Source project has a limited visibility.
    permissions.py 4.83 KiB
    from rest_framework import permissions
    
    from django.conf import settings
    from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
    
    from core.models.assemblies import Assembly
    from core.models.badges import Badge
    from core.models.conference import Conference
    from core.models.users import PlatformUser
    
    
    class IsApiUserOrReadOnly(permissions.BasePermission):
        def has_permission(self, request, view):
            return self.has_object_permission(request, view)
    
        def has_object_permission(self, request, view, obj=None):
            if request.method in permissions.SAFE_METHODS:
                return True
    
            if not settings.API_USERS:
                return False
    
            if not isinstance(settings.API_USERS, list):
                raise ImproperlyConfigured('API_USERS is not a list')
            return request.user.is_authenticated and request.user.username in settings.API_USERS
    
    
    class IsReadOnly(permissions.BasePermission):
        def has_object_permission(self, request, view, obj):
            return request.method in permissions.SAFE_METHODS
    
        def has_permission(self, request, view):
            return request.method in permissions.SAFE_METHODS
    
    
    class IsSuperUser(permissions.BasePermission):
        def has_object_permission(self, request, view, obj):
            return request.user.is_superuser
    
        def has_permission(self, request, view):
            return request.user.is_superuser
    
    
    class ConferencePermission(permissions.BasePermission):
        def get_conference(self, *, view, obj=None) -> Conference:
            if hasattr(view, 'conference'):
                conference = view.conference
            elif isinstance(obj, Conference):
                conference = obj
            elif hasattr(obj, 'conference'):
                conference = obj.conference
            else:
                raise ObjectDoesNotExist('Conference for this view not found')
            return conference
    
    
    class IsConferenceService(ConferencePermission):
        def has_permission(self, request, view):
            return self.has_object_permission(request, view)
    
        def has_object_permission(self, request, view, obj=None):
            if not request.user.is_authenticated:
                return False
            if request.user.user_type != PlatformUser.Type.SERVICE:
                return False
    
            try:
                conference = self.get_conference(view=view)
            except ObjectDoesNotExist:
                return False
            query_set = Conference.objects.filter(pk=conference.id)
    
            return query_set.filter(users__user=request.user, users__roles__contains=view.required_service_classes).exists()
    
    
    class AssemblyPermission(ConferencePermission):
        def get_assembly(self, *, view, obj=None) -> Assembly:
            if hasattr(view, 'assembly'):
                assembly = view.assembly
            elif isinstance(obj, Assembly):
                assembly = obj
            elif hasattr(obj, 'assembly'):
                assembly = obj.assembly
            else:
                raise ObjectDoesNotExist('Assembly for this view not found')
            return assembly
    
    
    class IsPublicAssemblyReadOnly(AssemblyPermission):
        def has_permission(self, request, view):
            return self.has_object_permission(request, view)
    
        def has_object_permission(self, request, view, obj=None):
            try:
                assembly = self.get_assembly(view=view)
            except ObjectDoesNotExist:
                return False
            return request.method in permissions.SAFE_METHODS and assembly.is_public
    
    
    class IsAssemblyService(AssemblyPermission):
        def has_permission(self, request, view):
            return self.has_object_permission(request, view)
    
        def has_object_permission(self, request, view, obj=None):
            assembly = self.get_assembly(view=view, obj=obj)
    
            return assembly.technical_user == request.user
    
    
    class IsAssemblyManager(AssemblyPermission):
        def has_permission(self, request, view):
            return self.has_object_permission(request, view)
    
        def has_object_permission(self, request, view, obj=None):
            user = request.user
            if not user.is_authenticated:
                return False
            if user.user_type != PlatformUser.Type.HUMAN:
                return False
    
            try:
                assembly = self.get_assembly(view=view)
            except ObjectDoesNotExist:
                return False
            query_set = Assembly.objects.filter(pk=assembly.id)
            return query_set.filter(members__member=user, members__can_manage_assembly=True).exists()
    
    
    class HasIssuingToken(AssemblyPermission):
        def has_permission(self, request, view):
            return self.has_object_permission(request, view)
    
        def has_object_permission(self, request, view, obj=None):
            try:
                assembly = self.get_assembly(view=view)
            except ObjectDoesNotExist:
                return False
            if not (issuing_token := view.kwargs.get('issuing_token', None)):
                return False
            return Badge.objects.filter(issuing_token=issuing_token, issuing_assembly=assembly).exists()