fix: expanded permission logic for admins
This commit is contained in:
@@ -28,6 +28,13 @@ class TicketForm(forms.ModelForm):
|
|||||||
'in_progress': [],
|
'in_progress': [],
|
||||||
'resolved': ['closed', 'new'],
|
'resolved': ['closed', 'new'],
|
||||||
'closed': [],
|
'closed': [],
|
||||||
|
},
|
||||||
|
'superuser': {
|
||||||
|
# Superuser können alle Übergänge machen
|
||||||
|
'new': ['in_progress', 'resolved', 'closed'],
|
||||||
|
'in_progress': ['new', 'resolved', 'closed'],
|
||||||
|
'resolved': ['new', 'in_progress', 'closed'],
|
||||||
|
'closed': ['new', 'in_progress', 'resolved'],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,32 +68,39 @@ class TicketForm(forms.ModelForm):
|
|||||||
is_superuser = self.user.is_superuser
|
is_superuser = self.user.is_superuser
|
||||||
|
|
||||||
# Status-Choices einschränken
|
# Status-Choices einschränken
|
||||||
self._limit_status_choices(is_tutor, is_creator)
|
self._limit_status_choices(is_tutor, is_creator, is_superuser)
|
||||||
|
|
||||||
# Feld-Berechtigungen setzen
|
# Feld-Berechtigungen setzen
|
||||||
self._set_field_permissions(is_tutor, is_creator, is_superuser)
|
self._set_field_permissions(is_tutor, is_creator, is_superuser)
|
||||||
|
|
||||||
def _set_field_permissions(self, is_tutor, is_creator, is_superuser):
|
def _set_field_permissions(self, is_tutor, is_creator, is_superuser):
|
||||||
"""Setzt welche Felder bearbeitet werden dürfen"""
|
"""Setzt welche Felder bearbeitet werden dürfen"""
|
||||||
if self.ticket.status == 'resolved' and is_creator and not is_superuser:
|
# Superuser können alles bearbeiten
|
||||||
|
if is_superuser:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.ticket.status == 'resolved' and is_creator:
|
||||||
for field_name in self.fields:
|
for field_name in self.fields:
|
||||||
if field_name == "answer":
|
if field_name == "answer":
|
||||||
self.fields[field_name].disabled = True
|
self.fields[field_name].disabled = True
|
||||||
elif is_tutor and not is_superuser:
|
elif is_tutor:
|
||||||
# Tutor darf ändern:
|
# Tutor darf ändern:
|
||||||
readonly_fields = ['title', 'description', 'material']
|
readonly_fields = ['title', 'description', 'material']
|
||||||
for field_name in readonly_fields:
|
for field_name in readonly_fields:
|
||||||
if field_name in self.fields:
|
if field_name in self.fields:
|
||||||
self.fields[field_name].disabled = True
|
self.fields[field_name].disabled = True
|
||||||
elif is_creator and not is_superuser and self.ticket.status != 'resolved':
|
elif is_creator and self.ticket.status != 'resolved':
|
||||||
for field_name in self.fields:
|
for field_name in self.fields:
|
||||||
self.fields[field_name].disabled = True
|
self.fields[field_name].disabled = True
|
||||||
|
|
||||||
def _limit_status_choices(self, is_tutor, is_creator):
|
def _limit_status_choices(self, is_tutor, is_creator, is_superuser):
|
||||||
"""Beschränkt verfügbare Status-Optionen basierend auf der zentralen Logik"""
|
"""Beschränkt verfügbare Status-Optionen basierend auf der zentralen Logik"""
|
||||||
current_status = self.ticket.status
|
current_status = self.ticket.status
|
||||||
|
|
||||||
if is_tutor:
|
# Superuser bekommen alle Status-Optionen
|
||||||
|
if is_superuser:
|
||||||
|
role = 'superuser'
|
||||||
|
elif is_tutor:
|
||||||
role = 'tutor'
|
role = 'tutor'
|
||||||
elif is_creator:
|
elif is_creator:
|
||||||
role = 'creator'
|
role = 'creator'
|
||||||
@@ -132,8 +146,12 @@ class TicketForm(forms.ModelForm):
|
|||||||
old_status = self.ticket.status
|
old_status = self.ticket.status
|
||||||
is_tutor = self.user == self.ticket.assigned_to
|
is_tutor = self.user == self.ticket.assigned_to
|
||||||
is_creator = self.user == self.ticket.created_by
|
is_creator = self.user == self.ticket.created_by
|
||||||
|
is_superuser = self.user.is_superuser
|
||||||
|
|
||||||
if is_tutor:
|
# Superuser dürfen alle Übergänge
|
||||||
|
if is_superuser:
|
||||||
|
role = 'superuser'
|
||||||
|
elif is_tutor:
|
||||||
role = 'tutor'
|
role = 'tutor'
|
||||||
elif is_creator:
|
elif is_creator:
|
||||||
role = 'creator'
|
role = 'creator'
|
||||||
|
|||||||
@@ -90,12 +90,14 @@ class TicketDetailUpdateView(UpdateView):
|
|||||||
is_superuser = user.is_superuser
|
is_superuser = user.is_superuser
|
||||||
|
|
||||||
# Bearbeitungsrechte abhängig vom Status
|
# Bearbeitungsrechte abhängig vom Status
|
||||||
if self.ticket.status == 'resolved' and is_creator:
|
if is_superuser:
|
||||||
self.can_edit = True
|
self.can_edit = True
|
||||||
elif self.ticket.status == 'closed' and not is_superuser:
|
elif self.ticket.status == 'resolved' and is_creator:
|
||||||
|
self.can_edit = True
|
||||||
|
elif self.ticket.status == 'closed':
|
||||||
self.can_edit = False
|
self.can_edit = False
|
||||||
else:
|
else:
|
||||||
self.can_edit = is_assigned_tutor or is_superuser
|
self.can_edit = is_assigned_tutor
|
||||||
|
|
||||||
# Zusätzliche Flags für Template
|
# Zusätzliche Flags für Template
|
||||||
self.is_creator = is_creator
|
self.is_creator = is_creator
|
||||||
|
|||||||
Reference in New Issue
Block a user