From 83c2e25aac2e7c7024d1f199793aea46d5ffe7dc Mon Sep 17 00:00:00 2001 From: j Date: Tue, 23 Aug 2016 15:24:37 +0200 Subject: [PATCH] support editable as result in find --- pandora/item/models.py | 1 + pandora/item/views.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pandora/item/models.py b/pandora/item/models.py index 91aa6a8c..63a052ec 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -573,6 +573,7 @@ class Item(models.Model): } if self.user: i['user'] = self.user.username + i['groups'] = [g.name for g in self.groups.all()] i.update(self.external_data) i.update(self.data) if settings.USE_IMDB: diff --git a/pandora/item/views.py b/pandora/item/views.py index 0bed6260..93166e7d 100644 --- a/pandora/item/views.py +++ b/pandora/item/views.py @@ -230,11 +230,25 @@ def find(request, data): 'numberofannotations', 'numberoffiles', 'numberofdocuments' } + groups = {g.name for g in request.user.groups.all()} + + def is_editable(item): + if request.user.is_anonymous(): + return False + if request.user.profile.capability('canEditMetadata') or \ + request.user.is_staff or \ + item.get('user') == request.user.username or \ + item.get('groups', []) & groups: + return True + return False + def only_p_sums(m): r = {} for p in _p: if p == 'accessed': r[p] = m.sort.accessed or '' + elif p == 'editable': + r[p] = is_editable(m.json) elif p in sort_keys: r[p] = getattr(m.sort, p) else: @@ -249,7 +263,10 @@ def find(request, data): if not isinstance(m, dict): m = json.loads(m, object_hook=oxdjango.fields.from_json) for p in _p: - r[p] = m.get(p) + if p == 'editable': + r[p] = is_editable(m) + else: + r[p] = m.get(p) if 'clip_qs' in query: r['clips'] = get_clips(query['clip_qs'].filter(item__public_id=m['id'])) return r