|
@@ -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
|