浏览代码

Bug #1237 : getChildrenOfType take Rights in account

sferot 11 年前
父节点
当前提交
953c0b1e87
共有 2 个文件被更改,包括 8 次插入4 次删除
  1. 0 1
      pboard/pboard/lib/base.py
  2. 8 3
      pboard/pboard/model/data.py

+ 0 - 1
pboard/pboard/lib/base.py 查看文件

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

+ 8 - 3
pboard/pboard/model/data.py 查看文件

23
 import tg
23
 import tg
24
 from pboard.model import DeclarativeBase, metadata, DBSession
24
 from pboard.model import DeclarativeBase, metadata, DBSession
25
 from pboard.model import auth as pma
25
 from pboard.model import auth as pma
26
+from pboard.lib.base import current_user
26
 
27
 
27
 
28
 
28
 class PBNodeStatusItem(object):
29
 class PBNodeStatusItem(object):
201
   def getChildrenOfType(self, plNodeTypeList, poKeySortingMethod=None, pbDoReverseSorting=False):
202
   def getChildrenOfType(self, plNodeTypeList, poKeySortingMethod=None, pbDoReverseSorting=False):
202
     """return all children nodes of type 'data' or 'node' or 'folder'"""
203
     """return all children nodes of type 'data' or 'node' or 'folder'"""
203
     llChildren = []
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
     if poKeySortingMethod!=None:
212
     if poKeySortingMethod!=None:
208
       llChildren = sorted(llChildren, key=poKeySortingMethod, reverse=pbDoReverseSorting)
213
       llChildren = sorted(llChildren, key=poKeySortingMethod, reverse=pbDoReverseSorting)
209
     return llChildren
214
     return llChildren