From 1ca024835c8231ca49c02183be5552b5b49fe40c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aneta=20Pokorn=C3=A1?= Date: Wed, 11 Nov 2020 00:17:31 +0100 Subject: [PATCH] =?UTF-8?q?viewsets=20|=20P=C5=99idan=C3=A9=20permissions?= =?UTF-8?q?=20podle=20ve=C5=99ejnosti=20(NEOTESTOVANO!),=20pozn=C3=A1mka?= =?UTF-8?q?=20k=20nastaven=C3=AD=20t=C3=A9ho=C5=BE=20u=20TNLData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 1 + seminar/viewsets.py | 28 +++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 316211fd..a550c40a 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -127,6 +127,7 @@ class TNLData(object): def from_treenode(cls,anode,parent=None,index=None): out = cls(anode,parent,index) for (idx,ch) in enumerate(treelib.all_children(anode)): + # FIXME přidat filtrování na veřejnost outitem = cls.from_treenode(ch,out,idx) out.children.append(outitem) out.add_edit_options() diff --git a/seminar/viewsets.py b/seminar/viewsets.py index 57dac391..cc59f7d7 100644 --- a/seminar/viewsets.py +++ b/seminar/viewsets.py @@ -18,12 +18,30 @@ class PermissionMixin(object): # návštěvník nemusí být zalogován, aby si prohlížel obsah return [permission() for permission in permission_classes] - def has_object_permission(self, request, view, obj): - if obj.verejne: - return True - else: - return False + def verejne_nad(self, node): + """ Returns output of verejne for closest Rocnik, Cislo or Problem above. + (All of them have method verejne.)""" + parent = get_parent(node) + while True: + rocnik = isinstance(parent, RocnikNode) + cislo = isinstance(parent, CisloNode) + problem = isinstance(parent, ProblemNode) + + if (rocnik or cislo or problem): + break + else: + parent = get_parent(parent) + if rocnik: + return parent.rocnik.verejne() + elif cislo: + return parent.cislo.verejne() + elif problem: + return parent.problem.verjne() + def has_object_permission(self, request, view, obj): + # test that obj is Node + assert isinstance(obj, Node) + return verejne_nad(node) class ReadWriteSerializerMixin(object): """