@@ -70,7 +70,7 @@ public class HibernateFolderDAO extends HibernatePersistentObjectDAO<Folder> imp
7070
7171 private static final String PARENTID_EQUAL = ".parentId=" ;
7272
73- private static final String FOLDER_ACL_AS_GROUP = ".accessControlList as _group " ;
73+ private static final String FOLDER_ACL_AS_ACL = ".accessControlList as _acl " ;
7474
7575 private static final String SECURITY_REF_IN = ".securityRef in (" ;
7676
@@ -94,7 +94,7 @@ public class HibernateFolderDAO extends HibernatePersistentObjectDAO<Folder> imp
9494
9595 private static final String SELECT_DISTINCT = "select distinct(" ;
9696
97- private static final String WHERE_GROUP_GROUPID_IN = " where _group .groupId in (" ;
97+ private static final String WHERE_GROUP_GROUPID_IN = " where _acl .groupId in (" ;
9898
9999 @ Resource (name = "UserDAO" )
100100 protected UserDAO userDAO ;
@@ -223,7 +223,7 @@ private void updateAliases(Folder folder) {
223223
224224 private void setCreator (Folder folder , FolderHistory transaction ) {
225225 if (transaction != null ) {
226- if (folder .getId () == 0 && transaction .getEvent () == null )
226+ if (folder .getId () == 0 && StringUtils . isEmpty ( transaction .getEvent ()) )
227227 transaction .setEvent (FolderEvent .CREATED .toString ());
228228
229229 // In case of creation event we set the creator
@@ -281,11 +281,12 @@ public List<Folder> findByUserId(long userId) throws PersistenceException {
281281 return findAll ();
282282
283283 Set <Group > userGroups = user .getGroups ();
284+
284285 if (!userGroups .isEmpty ()) {
285286 // First of all collect all folders that define it's own
286287 // policies
287288 StringBuilder query = new StringBuilder ("select distinct(_folder) from Folder _folder " );
288- query .append (" left join _folder" + FOLDER_ACL_AS_GROUP );
289+ query .append (" left join _folder" + FOLDER_ACL_AS_ACL );
289290 query .append (WHERE_GROUP_GROUPID_IN );
290291 query .append (userGroups .stream ().map (ug -> Long .toString (ug .getId ())).collect (Collectors .joining ("," )));
291292 query .append (")" );
@@ -299,7 +300,8 @@ public List<Folder> findByUserId(long userId) throws PersistenceException {
299300 query = new StringBuilder ("select _folder from Folder _folder where _folder.securityRef in (" );
300301 query .append (folders .stream ().map (f -> Long .toString (f .getId ())).collect (Collectors .joining ("," )));
301302 query .append (")" );
302- List <Folder > tmp = find (query .toString (), user .getTenantId ());
303+
304+ List <Folder > tmp = findByObjectQuery (query .toString (), null , null );
303305
304306 for (Folder folder : tmp ) {
305307 if (!folders .contains (folder ))
@@ -320,7 +322,7 @@ private User getExistingtUser(long userId) throws PersistenceException {
320322
321323 @ Override
322324 public List <Folder > findByUserId (long userId , long parentId ) throws PersistenceException {
323- List <Folder > coll = new ArrayList <>();
325+ List <Folder > accessibleFolders = new ArrayList <>();
324326
325327 User user = getExistingtUser (userId );
326328
@@ -331,17 +333,20 @@ public List<Folder> findByUserId(long userId, long parentId) throws PersistenceE
331333 * Search for all those folders that defines its own security policies
332334 */
333335 StringBuilder query1 = new StringBuilder ();
334- Set <Group > precoll = user .getGroups ();
335- if (precoll .isEmpty ())
336- return coll ;
336+ Set <Group > allUserGroups = user .getGroups ();
337+ if (allUserGroups .isEmpty ())
338+ return accessibleFolders ;
339+
340+ String allUserGroupIds = allUserGroups .stream ().map (ug -> Long .toString (ug .getId ()))
341+ .collect (Collectors .joining ("," ));
337342
338343 query1 .append (SELECT_DISTINCT + ENTITY + ") " + FROM_FOLDER + ENTITY + " " );
339- query1 .append (LEFT_JOIN + ENTITY + FOLDER_ACL_AS_GROUP );
344+ query1 .append (LEFT_JOIN + ENTITY + FOLDER_ACL_AS_ACL );
340345 query1 .append (WHERE_GROUP_GROUPID_IN );
341- query1 .append (precoll . stream (). map ( ug -> Long . toString ( ug . getId ())). collect ( Collectors . joining ( "," )) );
346+ query1 .append (allUserGroupIds );
342347 query1 .append (") " + AND + ENTITY + ".parentId = :parentId and " + ENTITY + ".id != " + ENTITY + ".parentId" );
343348
344- coll = findByObjectQuery (query1 .toString (), Map .of (PARENT_ID , parentId ), null );
349+ accessibleFolders = findByObjectQuery (query1 .toString (), Map .of (PARENT_ID , parentId ), null );
345350
346351 /*
347352 * Now search for all other folders that references accessible folders
@@ -350,19 +355,19 @@ public List<Folder> findByUserId(long userId, long parentId) throws PersistenceE
350355 + ".deleted=0 and " + ENTITY + ".parentId = :parentId " );
351356 query2 .append (AND + ENTITY + SECURITY_REF_IN );
352357 query2 .append (" select distinct(B.id) from Folder B " );
353- query2 .append (" left join B.accessControlList as _group " );
358+ query2 .append (" left join B.accessControlList as _acl " );
354359 query2 .append (WHERE_GROUP_GROUPID_IN );
355- query2 .append (precoll .stream ().map (ug -> Long .toString (ug .getId ())).collect (Collectors .joining ("," )));
360+ query2 .append (allUserGroups .stream ().map (ug -> Long .toString (ug .getId ())).collect (Collectors .joining ("," )));
356361 query2 .append ("))" );
357362
358363 List <Folder > coll2 = findByObjectQuery (query2 .toString (), Map .of (PARENT_ID , parentId ), null );
359364 for (Folder folder : coll2 ) {
360- if (!coll .contains (folder ))
361- coll .add (folder );
365+ if (!accessibleFolders .contains (folder ))
366+ accessibleFolders .add (folder );
362367 }
363368
364- Collections .sort (coll , (o1 , o2 ) -> (-1 * o1 .getName ().compareTo (o2 .getName ())));
365- return coll ;
369+ Collections .sort (accessibleFolders , (o1 , o2 ) -> (-1 * o1 .getName ().compareTo (o2 .getName ())));
370+ return accessibleFolders ;
366371 }
367372
368373 @ Override
@@ -392,7 +397,7 @@ public List<Folder> findChildren(long parentId, long userId) throws PersistenceE
392397 * Search for the folders that define its own policies
393398 */
394399 StringBuilder query1 = new StringBuilder (SELECT_DISTINCT + ENTITY + ") " + FROM_FOLDER + ENTITY + " " );
395- query1 .append (LEFT_JOIN + ENTITY + FOLDER_ACL_AS_GROUP );
400+ query1 .append (LEFT_JOIN + ENTITY + FOLDER_ACL_AS_ACL );
396401 query1 .append (WHERE_GROUP_GROUPID_IN );
397402 query1 .append (groups .stream ().map (ug -> Long .toString (ug .getId ())).collect (Collectors .joining ("," )));
398403 query1 .append (") " + AND + ENTITY + PARENTID_EQUAL + parent .getId ());
@@ -407,7 +412,7 @@ public List<Folder> findChildren(long parentId, long userId) throws PersistenceE
407412 + ".deleted=0 and " + ENTITY + ".parentId = :parentId " );
408413 query2 .append (AND + ENTITY + SECURITY_REF_IN );
409414 query2 .append (" select distinct(B.id) from Folder B " );
410- query2 .append (" left join B.accessControlList as _group " );
415+ query2 .append (" left join B.accessControlList as _acl " );
411416 query2 .append (WHERE_GROUP_GROUPID_IN );
412417 query2 .append (groups .stream ().map (ug -> Long .toString (ug .getId ())).collect (Collectors .joining ("," )));
413418 query2 .append ("))" );
@@ -489,6 +494,7 @@ public boolean isReadAllowed(long folderId, long userId) throws PersistenceExcep
489494
490495 long id = folderId ;
491496 Folder folder = findById (folderId );
497+
492498 if (folder == null )
493499 return false ;
494500 if (folder .getSecurityRef () != null )
@@ -536,8 +542,8 @@ public List<Folder> findByGroupId(long groupId) throws PersistenceException {
536542 * Search for folders that define its own security policies
537543 */
538544 StringBuilder query = new StringBuilder (SELECT_DISTINCT + ENTITY + ") " + FROM_FOLDER + ENTITY + " " );
539- query .append (LEFT_JOIN + ENTITY + FOLDER_ACL_AS_GROUP );
540- query .append (WHERE + ENTITY + ".deleted=0 and _group .groupId =" + groupId );
545+ query .append (LEFT_JOIN + ENTITY + FOLDER_ACL_AS_ACL );
546+ query .append (WHERE + ENTITY + ".deleted=0 and _acl .groupId =" + groupId );
541547
542548 List <Folder > coll = findByObjectQuery (query .toString (), (Map <String , Object >) null , null );
543549
@@ -897,6 +903,7 @@ public Set<Permission> getAllowedPermissions(long folderId, long userId) throws
897903 // the policies
898904 long id = folderId ;
899905 Folder folder = findById (folderId );
906+
900907 if (folder .getSecurityRef () != null ) {
901908 id = folder .getSecurityRef ().longValue ();
902909 log .debug ("Use the security reference {}" , id );
0 commit comments