mirror of
https://github.com/pretix/pretix.git
synced 2026-08-26 13:14:40 +00:00
Add permission for outgoing mails
This commit is contained in:
@@ -329,4 +329,13 @@ def register_default_organizer_permissions(sender, **kwargs):
|
|||||||
actions=["write"],
|
actions=["write"],
|
||||||
options=OPTS_ALL_READ,
|
options=OPTS_ALL_READ,
|
||||||
),
|
),
|
||||||
|
PermissionGroup(
|
||||||
|
name="organizer.outgoingmails",
|
||||||
|
label=_("Outgoing emails"),
|
||||||
|
actions=["read"],
|
||||||
|
options=[
|
||||||
|
PermissionOption(actions=tuple(), label=pgettext_lazy("permission_level", "No access")),
|
||||||
|
PermissionOption(actions=("read",), label=pgettext_lazy("permission_level", "View")),
|
||||||
|
],
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -702,6 +702,7 @@ def get_organizer_navigation(request):
|
|||||||
'active': (url.url_name == 'organizer.datasync.failedjobs'),
|
'active': (url.url_name == 'organizer.datasync.failedjobs'),
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
if 'organizer.outgoingmails:read' in request.orgapermset:
|
||||||
nav.append({
|
nav.append({
|
||||||
'label': _('Outgoing emails'),
|
'label': _('Outgoing emails'),
|
||||||
'url': reverse('control:organizer.outgoingmails', kwargs={
|
'url': reverse('control:organizer.outgoingmails', kwargs={
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ class OutgoingMailListView(OutgoingMailQueryMixin, OrganizerDetailViewMixin, Org
|
|||||||
template_name = 'pretixcontrol/organizers/outgoing_mails.html'
|
template_name = 'pretixcontrol/organizers/outgoing_mails.html'
|
||||||
# Assume "the highest" permission level for now because emails could belog to any event, order, or customer.
|
# Assume "the highest" permission level for now because emails could belog to any event, order, or customer.
|
||||||
# We plan to add a special permissoin in the future
|
# We plan to add a special permissoin in the future
|
||||||
permission = 'can_change_organizer_settings'
|
permission = 'organizer.outgoingmails:read'
|
||||||
context_object_name = 'mails'
|
context_object_name = 'mails'
|
||||||
paginate_by = 100
|
paginate_by = 100
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ class OutgoingMailListView(OutgoingMailQueryMixin, OrganizerDetailViewMixin, Org
|
|||||||
class OutgoingMailDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView):
|
class OutgoingMailDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView):
|
||||||
model = OutgoingMail
|
model = OutgoingMail
|
||||||
template_name = 'pretixcontrol/organizers/outgoing_mail.html'
|
template_name = 'pretixcontrol/organizers/outgoing_mail.html'
|
||||||
permission = 'can_change_organizer_settings'
|
permission = 'organizer.outgoingmails:read'
|
||||||
context_object_name = 'mail'
|
context_object_name = 'mail'
|
||||||
|
|
||||||
def get_object(self, queryset=None):
|
def get_object(self, queryset=None):
|
||||||
@@ -136,7 +136,7 @@ class OutgoingMailDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequir
|
|||||||
|
|
||||||
|
|
||||||
class OutgoingMailBulkAction(OutgoingMailQueryMixin, OrganizerPermissionRequiredMixin, OrganizerDetailViewMixin, View):
|
class OutgoingMailBulkAction(OutgoingMailQueryMixin, OrganizerPermissionRequiredMixin, OrganizerDetailViewMixin, View):
|
||||||
permission = 'can_change_organizer_settings'
|
permission = 'organizer.outgoingmails:read'
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ OLD_TO_NEW_EVENT_MIGRATION = {
|
|||||||
OLD_TO_NEW_ORGANIZER_MIGRATION = {
|
OLD_TO_NEW_ORGANIZER_MIGRATION = {
|
||||||
"can_create_events": ["organizer.events:create"],
|
"can_create_events": ["organizer.events:create"],
|
||||||
"can_change_organizer_settings": ["organizer.settings.general:write", "organizer.devices:read",
|
"can_change_organizer_settings": ["organizer.settings.general:write", "organizer.devices:read",
|
||||||
"organizer.devices:write", "organizer.seatingplans:write"],
|
"organizer.devices:write", "organizer.seatingplans:write",
|
||||||
|
"organizer.outgoingmails:read"],
|
||||||
"can_change_teams": ["organizer.teams:write"],
|
"can_change_teams": ["organizer.teams:write"],
|
||||||
"can_manage_gift_cards": ["organizer.giftcards:read", "organizer.giftcards:write"],
|
"can_manage_gift_cards": ["organizer.giftcards:read", "organizer.giftcards:write"],
|
||||||
"can_manage_customers": ["organizer.customers:read", "organizer.customers:write"],
|
"can_manage_customers": ["organizer.customers:read", "organizer.customers:write"],
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ def test_specific_event_permission_limited(event, user):
|
|||||||
assert not user.has_event_permission(event.organizer, event, 'event.settings.general:write')
|
assert not user.has_event_permission(event.organizer, event, 'event.settings.general:write')
|
||||||
|
|
||||||
assert user.has_event_permission(event.organizer, event, ('event.orders:write', 'event.settings.general:write'))
|
assert user.has_event_permission(event.organizer, event, ('event.orders:write', 'event.settings.general:write'))
|
||||||
assert not user.has_event_permission(event.organizer, event, ('organizer.teams:write', 'event.settings.general:write'))
|
assert not user.has_event_permission(event.organizer, event, ('event.items:write', 'event.settings.general:write'))
|
||||||
|
|
||||||
team.limit_event_permissions = {}
|
team.limit_event_permissions = {}
|
||||||
team.save()
|
team.save()
|
||||||
@@ -182,7 +182,7 @@ def test_event_permissions_multiple_teams(event, user):
|
|||||||
}
|
}
|
||||||
assert user.get_event_permission_set(event.organizer, event2) == {
|
assert user.get_event_permission_set(event.organizer, event2) == {
|
||||||
'event.orders:write', 'event.settings.general:write', 'event.settings.general:write',
|
'event.orders:write', 'event.settings.general:write', 'event.settings.general:write',
|
||||||
'can_change_orders', 'can_change_event_settings',
|
'can_change_orders', 'can_change_event_settings', 'can_change_settings',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -337,7 +337,7 @@ def test_check_with_legacy_permission_names(event, user):
|
|||||||
"organizer.reusablemedia:write",
|
"organizer.reusablemedia:write",
|
||||||
}
|
}
|
||||||
assert team1.event_permission_set() == {
|
assert team1.event_permission_set() == {
|
||||||
"event.settings.general:write", "can_change_event_settings",
|
"event.settings.general:write", "can_change_event_settings", "can_change_settings",
|
||||||
}
|
}
|
||||||
assert team1.event_permission_set(include_legacy=False) == {
|
assert team1.event_permission_set(include_legacy=False) == {
|
||||||
"event.settings.general:write",
|
"event.settings.general:write",
|
||||||
@@ -346,7 +346,7 @@ def test_check_with_legacy_permission_names(event, user):
|
|||||||
# User methods
|
# User methods
|
||||||
user._teamcache = {}
|
user._teamcache = {}
|
||||||
assert user.get_event_permission_set(event.organizer, event) == {
|
assert user.get_event_permission_set(event.organizer, event) == {
|
||||||
"event.settings.general:write", "can_change_event_settings",
|
"event.settings.general:write", "can_change_event_settings", "can_change_settings",
|
||||||
}
|
}
|
||||||
assert user.get_organizer_permission_set(event.organizer) == {
|
assert user.get_organizer_permission_set(event.organizer) == {
|
||||||
"organizer.giftcards:read",
|
"organizer.giftcards:read",
|
||||||
|
|||||||
@@ -537,9 +537,9 @@ organizer_permission_urls = [
|
|||||||
("organizer.settings.general:write", "organizer/dummy/settings/plugins/pretix.plugins.sendmail/events", 200),
|
("organizer.settings.general:write", "organizer/dummy/settings/plugins/pretix.plugins.sendmail/events", 200),
|
||||||
("organizer.settings.general:write", "organizer/dummy/settings/email", 200),
|
("organizer.settings.general:write", "organizer/dummy/settings/email", 200),
|
||||||
("organizer.settings.general:write", "organizer/dummy/settings/email/setup", 200),
|
("organizer.settings.general:write", "organizer/dummy/settings/email/setup", 200),
|
||||||
("organizer.settings.general:write", "organizer/dummy/outgoingmails", 200),
|
("organizer.outgoingmails:read", "organizer/dummy/outgoingmails", 200),
|
||||||
("organizer.settings.general:write", "organizer/dummy/outgoingmail/1/", 404),
|
("organizer.outgoingmails:read", "organizer/dummy/outgoingmail/1/", 404),
|
||||||
("organizer.settings.general:write", "organizer/dummy/outgoingmail/bulk_action", 405),
|
("organizer.outgoingmails:read", "organizer/dummy/outgoingmail/bulk_action", 405),
|
||||||
("organizer.devices:read", "organizer/dummy/devices", 200),
|
("organizer.devices:read", "organizer/dummy/devices", 200),
|
||||||
("organizer.devices:read", "organizer/dummy/devices/select2", 200),
|
("organizer.devices:read", "organizer/dummy/devices/select2", 200),
|
||||||
("organizer.devices:write", "organizer/dummy/device/add", 200),
|
("organizer.devices:write", "organizer/dummy/device/add", 200),
|
||||||
|
|||||||
@@ -239,6 +239,7 @@ def test_create_team(event, admin_user, admin_team, client):
|
|||||||
'organizer_organizer.reusablemedia': "EMPTY",
|
'organizer_organizer.reusablemedia': "EMPTY",
|
||||||
'organizer_organizer.devices': "EMPTY",
|
'organizer_organizer.devices': "EMPTY",
|
||||||
'organizer_organizer.seatingplans': "EMPTY",
|
'organizer_organizer.seatingplans': "EMPTY",
|
||||||
|
'organizer_organizer.outgoingmails': "EMPTY",
|
||||||
'event_event.settings.general': "write",
|
'event_event.settings.general': "write",
|
||||||
'event_event.settings.payment': "EMPTY",
|
'event_event.settings.payment': "EMPTY",
|
||||||
'event_event.settings.tax': "EMPTY",
|
'event_event.settings.tax': "EMPTY",
|
||||||
@@ -277,6 +278,7 @@ def test_update_team(event, admin_user, admin_team, client):
|
|||||||
'organizer_organizer.reusablemedia': "EMPTY",
|
'organizer_organizer.reusablemedia': "EMPTY",
|
||||||
'organizer_organizer.devices': "EMPTY",
|
'organizer_organizer.devices': "EMPTY",
|
||||||
'organizer_organizer.seatingplans': "EMPTY",
|
'organizer_organizer.seatingplans': "EMPTY",
|
||||||
|
'organizer_organizer.outgoingmails': "EMPTY",
|
||||||
'event_event.settings.general': "write",
|
'event_event.settings.general': "write",
|
||||||
'event_event.settings.payment': "EMPTY",
|
'event_event.settings.payment': "EMPTY",
|
||||||
'event_event.settings.tax': "EMPTY",
|
'event_event.settings.tax': "EMPTY",
|
||||||
|
|||||||
Reference in New Issue
Block a user