changeset permissions
This commit is contained in:
parent
ef5f4c0704
commit
0ea8ca9920
3 changed files with 14 additions and 10 deletions
|
@ -263,7 +263,7 @@ class ChangedObject(models.Model):
|
||||||
(not self.is_created and self.deleted))
|
(not self.is_created and self.deleted))
|
||||||
|
|
||||||
def save(self, *args, standalone=False, **kwargs):
|
def save(self, *args, standalone=False, **kwargs):
|
||||||
if self.changeset.proposed is not None or self.changeset.applied is not None:
|
if not self.changeset.editable:
|
||||||
raise TypeError('can not add change object to uneditable changeset.')
|
raise TypeError('can not add change object to uneditable changeset.')
|
||||||
self.m2m_added = {name: tuple(values) for name, values in self._m2m_added_cache.items()}
|
self.m2m_added = {name: tuple(values) for name, values in self._m2m_added_cache.items()}
|
||||||
self.m2m_removed = {name: tuple(values) for name, values in self._m2m_removed_cache.items()}
|
self.m2m_removed = {name: tuple(values) for name, values in self._m2m_removed_cache.items()}
|
||||||
|
|
|
@ -187,9 +187,6 @@ class ChangeSet(models.Model):
|
||||||
|
|
||||||
return objects
|
return objects
|
||||||
|
|
||||||
"""
|
|
||||||
Lookup changes and created objects
|
|
||||||
"""
|
|
||||||
def get_changed_values(self, model: models.Model, name: str) -> tuple:
|
def get_changed_values(self, model: models.Model, name: str) -> tuple:
|
||||||
"""
|
"""
|
||||||
Get all changes values for a specific field on existing models
|
Get all changes values for a specific field on existing models
|
||||||
|
@ -247,6 +244,17 @@ class ChangeSet(models.Model):
|
||||||
model = model._obj
|
model = model._obj
|
||||||
return set(self.created_objects.get(model, {}).keys())
|
return set(self.created_objects.get(model, {}).keys())
|
||||||
|
|
||||||
|
"""
|
||||||
|
Permissions
|
||||||
|
"""
|
||||||
|
@property
|
||||||
|
def editable(self):
|
||||||
|
return self.applied is None
|
||||||
|
|
||||||
|
def can_edit(self, request):
|
||||||
|
return (self.editable and self.session_id == request.session.session_key and
|
||||||
|
(self.proposed is None or self.assigned_to_id is request.user.pk))
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Methods for display
|
Methods for display
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -18,11 +18,10 @@ from c3nav.mapdata.models.locations import LocationRedirect, LocationSlug
|
||||||
|
|
||||||
@sidebar_view
|
@sidebar_view
|
||||||
def changeset_detail(request, pk):
|
def changeset_detail(request, pk):
|
||||||
can_edit = True
|
|
||||||
changeset = request.changeset
|
changeset = request.changeset
|
||||||
if str(pk) != str(request.changeset.pk):
|
if str(pk) != str(request.changeset.pk):
|
||||||
can_edit = False
|
|
||||||
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
|
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
|
||||||
|
can_edit = changeset.can_edit(request)
|
||||||
|
|
||||||
if request.method == 'POST' and can_edit:
|
if request.method == 'POST' and can_edit:
|
||||||
restore = request.POST.get('restore')
|
restore = request.POST.get('restore')
|
||||||
|
@ -228,14 +227,11 @@ def changeset_detail(request, pk):
|
||||||
|
|
||||||
@sidebar_view
|
@sidebar_view
|
||||||
def changeset_edit(request, pk):
|
def changeset_edit(request, pk):
|
||||||
can_edit = True
|
|
||||||
changeset = request.changeset
|
changeset = request.changeset
|
||||||
|
|
||||||
if str(pk) != str(request.changeset.pk):
|
if str(pk) != str(request.changeset.pk):
|
||||||
can_edit = False
|
|
||||||
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
|
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
|
||||||
|
|
||||||
if not can_edit:
|
if not changeset.can_edit(request):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue