Browse Source

Bug #1237 : getChildrenOfType take Rights in account

sferot 10 years ago
parent
commit
953c0b1e87
2 changed files with 8 additions and 4 deletions
  1. 0 1
      pboard/pboard/lib/base.py
  2. 8 3
      pboard/pboard/model/data.py

+ 0 - 1
pboard/pboard/lib/base.py View File

@@ -6,7 +6,6 @@ from tg import TGController, tmpl_context, flash
6 6
 from tg.render import render
7 7
 from tg import request, redirect
8 8
 from tg.i18n import ugettext as _, ungettext
9
-import pboard.model as model
10 9
 
11 10
 __all__ = ['BaseController']
12 11
 

+ 8 - 3
pboard/pboard/model/data.py View File

@@ -23,6 +23,7 @@ from tg.i18n import ugettext as _, lazy_ugettext as l_
23 23
 import tg
24 24
 from pboard.model import DeclarativeBase, metadata, DBSession
25 25
 from pboard.model import auth as pma
26
+from pboard.lib.base import current_user
26 27
 
27 28
 
28 29
 class PBNodeStatusItem(object):
@@ -201,9 +202,13 @@ class PBNode(DeclarativeBase):
201 202
   def getChildrenOfType(self, plNodeTypeList, poKeySortingMethod=None, pbDoReverseSorting=False):
202 203
     """return all children nodes of type 'data' or 'node' or 'folder'"""
203 204
     llChildren = []
204
-    for child in self._lAllChildren:
205
-      if child.node_type in plNodeTypeList:
206
-        llChildren.append(child)
205
+    user_id = current_user().user_id
206
+    llChildren = DBSession.query(PBNode).outerjoin(pma.Rights)\
207
+            .outerjoin(pma.user_group_table, pma.Rights.group_id==pma.user_group_table.columns['group_id'])\
208
+            .filter(PBNode.parent_id==self.node_id)\
209
+            .filter((PBNode.owner_id==user_id) | ((pma.user_group_table.c.user_id==user_id) & (PBNode.is_shared == True)))\
210
+            .filter(PBNode.node_type.in_(plNodeTypeList))\
211
+            .all()
207 212
     if poKeySortingMethod!=None:
208 213
       llChildren = sorted(llChildren, key=poKeySortingMethod, reverse=pbDoReverseSorting)
209 214
     return llChildren