Exporters: Pass state about staff_session

This commit is contained in:
Raphael Michel
2026-04-02 21:03:42 +02:00
parent d411c36414
commit 92d1830f3b
2 changed files with 16 additions and 3 deletions

View File

@@ -705,6 +705,18 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin):
return self.teams.exists() return self.teams.exists()
class UserWithStaffSession:
# Wrapper around a User object with a staff session, implementing the PermissionHolder Protocol
def __init__(self, user):
self.user = user
def has_event_permission(self, organizer, event, perm_name=None, request=None, session_key=None) -> bool:
return True
def has_organizer_permission(self, organizer, perm_name=None, request=None):
return True
class UserKnownLoginSource(models.Model): class UserKnownLoginSource(models.Model):
user = models.ForeignKey('User', on_delete=models.CASCADE, related_name="known_login_sources") user = models.ForeignKey('User', on_delete=models.CASCADE, related_name="known_login_sources")
agent_type = models.CharField(max_length=255, null=True, blank=True) agent_type = models.CharField(max_length=255, null=True, blank=True)

View File

@@ -40,6 +40,7 @@ from pretix.base.models import (
CachedFile, Device, Event, Organizer, ScheduledEventExport, TeamAPIToken, CachedFile, Device, Event, Organizer, ScheduledEventExport, TeamAPIToken,
User, cachedfile_name, User, cachedfile_name,
) )
from pretix.base.models.auth import UserWithStaffSession
from pretix.base.models.exports import ScheduledOrganizerExport from pretix.base.models.exports import ScheduledOrganizerExport
from pretix.base.services.mail import mail from pretix.base.services.mail import mail
from pretix.base.services.tasks import ( from pretix.base.services.tasks import (
@@ -214,7 +215,7 @@ def init_event_exporters(event, user=None, token=None, device=None, request=None
exporter: BaseExporter = response( exporter: BaseExporter = response(
event=event, event=event,
organizer=event.organizer, organizer=event.organizer,
permission_holder=token or device or user, permission_holder=token or device or (UserWithStaffSession(user) if staff_session else User),
**kwargs **kwargs
) )
@@ -251,7 +252,7 @@ def init_organizer_exporters(
exporter: BaseExporter = response( exporter: BaseExporter = response(
event=Event.objects.none(), event=Event.objects.none(),
organizer=organizer, organizer=organizer,
permission_holder=token or device or user, permission_holder=token or device or (UserWithStaffSession(user) if staff_session else User),
**kwargs, **kwargs,
) )
@@ -308,7 +309,7 @@ def init_organizer_exporters(
exporter: BaseExporter = response( exporter: BaseExporter = response(
event=_event_list_cache[permission_name], event=_event_list_cache[permission_name],
organizer=organizer, organizer=organizer,
permission_holder=token or device or user, permission_holder=token or device or (UserWithStaffSession(user) if staff_session else User),
**kwargs, **kwargs,
) )