CCM NG/ccm-cms: Extended named queries for ContentItem to take permissions into account

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4731 8810af33-2d31-482b-a856-94f89814c4df
jensp 2017-05-11 18:13:47 +00:00
parent 6c7022eafc
commit 9084ade61e
1 changed files with 161 additions and 89 deletions

View File

@ -71,111 +71,140 @@ import static org.librecms.CmsConstants.*;
@NamedQuery( @NamedQuery(
name = "ContentItem.findById", name = "ContentItem.findById",
query query
= "SELECT DISTINCT i " = "SELECT DISTINCT i "
+ "FROM ContentItem i " + "FROM ContentItem i "
+ "JOIN i.permissions p " + "JOIN i.permissions p "
+ "WHERE i.objectId = :objectId " + "WHERE i.objectId = :objectId "
+ "AND (" + "AND ("
+ " (" + " ("
+ " p.grantee IN :roles " + " p.grantee IN :roles "
+ " AND p.grantedPrivilege = " + " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' " + " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' " + " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END" + " END"
+ " )" + " )"
+ " ) " + " ) "
+ " OR true = :isSystemUser OR true = :isAdmin" + " OR true = :isSystemUser OR true = :isAdmin"
+ " )") + " )")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.findByType", name = "ContentItem.findByType",
query query
= "SELECT DISTINCT i " = "SELECT DISTINCT i "
+ "FROM ContentItem i " + "FROM ContentItem i "
+ "JOIN i.permissions p " + "JOIN i.permissions p "
+ "WHERE TYPE(i) = :type " + "WHERE TYPE(i) = :type "
+ "AND (" + "AND ("
+ " (" + " ("
+ " p.grantee IN :roles " + " p.grantee IN :roles "
+ " AND p.grantedPrivilege = " + " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' " + " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' " + " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END" + " END"
+ " )" + " )"
+ " ) " + " ) "
+ " OR true = :isSystemUser OR true = :isAdmin" + " OR true = :isSystemUser OR true = :isAdmin"
+ " )") + " )")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.findByFolder", name = "ContentItem.findByFolder",
query query
= "SELECT DISTINCT i " = "SELECT DISTINCT i "
+ "FROM ContentItem i " + "FROM ContentItem i "
+ "JOIN i.categories c " + "JOIN i.categories c "
+ "JOIN i.permissions p " + "JOIN i.permissions p "
+ "WHERE c.category = :folder " + "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' "
+ "AND (" + "AND ("
+ " (" + " ("
+ " p.grantee IN :roles " + " p.grantee IN :roles "
+ " AND p.grantedPrivilege = " + " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' " + " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' " + " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END" + " END"
+ " )" + " )"
+ " )" + " )"
+ " OR true = :isSystemUser OR true = :isAdmin" + " OR true = :isSystemUser OR true = :isAdmin"
+ " )") + " )")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.countItemsInFolder", name = "ContentItem.countItemsInFolder",
query = "SELECT COUNT(i) FROM ContentItem i " query
+ "JOIN i.categories c " = "SELECT DISTINCT COUNT(i) "
+ "WHERE c.category = :folder " + "FROM ContentItem i "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "'") + "JOIN i.categories c "
+ "JOIN i.permissions p "
+ "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' "
+ "AND ("
+ " ("
+ " p.grantee IN :roles "
+ " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END"
+ " )"
+ " )"
+ " OR true = :isSystemUser OR true = :isAdmin"
+ " )")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.findByNameInFolder", name = "ContentItem.findByNameInFolder",
query query
= "SELECT DISTINCT i " = "SELECT DISTINCT i "
+ "FROM ContentItem i " + "FROM ContentItem i "
+ "JOIN i.categories c " + "JOIN i.categories c "
+ "JOIN i.permissions p " + "JOIN i.permissions p "
+ "WHERE c.category = :folder " + "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' "
+ "AND i.displayName = :name " + "AND i.displayName = :name "
+ "AND (" + "AND ("
+ " (" + " ("
+ " p.grantee IN :roles " + " p.grantee IN :roles "
+ " AND p.grantedPrivilege = " + " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' " + " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' " + " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' " + " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END" + " END"
+ " )" + " )"
+ " )" + " )"
+ " OR true = :isSystemUser OR true = :isAdmin" + " OR true = :isSystemUser OR true = :isAdmin"
+ " )") + " )")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.countByNameInFolder", name = "ContentItem.countByNameInFolder",
query = "SELECT COUNT(i) FROM ContentItem i " query = "SELECT DISTINCT COUNT(i)"
+ " FROM ContentItem i "
+ "JOIN i.categories c " + "JOIN i.categories c "
+ "JOIN i.permissions p "
+ "WHERE c.category = :folder " + "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' "
+ "' " + "AND i.displayName = :name "
+ "AND i.displayName = :name") + "AND ("
+ " ("
+ " p.grantee IN :roles "
+ " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END"
+ " )"
+ " )"
+ " OR true = :isSystemUser OR true = :isAdmin"
+ " )")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.filterByFolderAndName", name = "ContentItem.filterByFolderAndName",
query = "SELECT i FROM ContentItem i " query = "SELECT DISTINCT i "
+ "FROM ContentItem i "
+ "JOIN i.categories c " + "JOIN i.categories c "
+ "JOIN i.permissions p "
+ "WHERE c.category = :folder " + "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' "
+ "' "
+ "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%')") + "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%')")
, ,
@NamedQuery( @NamedQuery(
@ -185,7 +214,19 @@ import static org.librecms.CmsConstants.*;
+ "WHERE c.category = :folder " + "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER
+ "' " + "' "
+ "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%')" + "AND LOWER(i.displayName) LIKE CONCAT(LOWER(:name), '%') "
+ "AND ("
+ " ("
+ " p.grantee IN :roles "
+ " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END"
+ " )"
+ " )"
+ " OR true = :isSystemUser OR true = :isAdmin"
+ " )"
) )
, ,
@NamedQuery( @NamedQuery(
@ -197,20 +238,51 @@ import static org.librecms.CmsConstants.*;
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.findDraftVersion", name = "ContentItem.findDraftVersion",
query = "SELECT i FROM ContentItem i " query
+ "WHERE i.itemUuid = :uuid " = "SELECT DISTINCT i "
+ "AND i.version = org.librecms.contentsection.ContentItemVersion.DRAFT") + "FROM ContentItem i "
+ "JOIN i.permissions p "
+ "WHERE i.itemUuid = :uuid "
+ "AND i.version = 'DRAFT' "
+ "AND "
+ "((p.grantee IN :roles "
+ "AND p.grantedPrivilege = '" + ItemPrivileges.PREVIEW + "' "
+ ") OR true = :isSystemUser OR true = :isAdmin)")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.findLiveVersion", name = "ContentItem.findLiveVersion",
query = "SELECT i FROM ContentItem i " query
+ "WHERE i.itemUuid = :uuid " = "SELECT DISTINCT i "
+ "AND i.version = org.librecms.contentsection.ContentItemVersion.LIVE") + "FROM ContentItem i "
+ "JOIN i.permissions p "
+ "WHERE i.itemUuid = :uuid "
+ "AND i.version = 'LIVE' "
+ "AND "
+ "((p.grantee IN :roles "
+ "AND p.grantedPrivilege = "
+ "'"
+ ItemPrivileges.VIEW_PUBLISHED
+ "' "
+ ") OR true = :isSystemUser OR true = :isAdmin)")
, ,
@NamedQuery( @NamedQuery(
name = "ContentItem.findItemWithWorkflow", name = "ContentItem.findItemWithWorkflow",
query = "SELECT i FROM ContentItem i " query = "SELECT DISTINCT i "
+ "WHERE i.workflow = :workflow" + "FROM ContentItem i "
+ "JOIN i.permissions p "
+ "WHERE i.workflow = :workflow "
+ "AND ("
+ " ("
+ " p.grantee IN :roles "
+ " AND p.grantedPrivilege = "
+ " (CASE WHEN i.version = 'DRAFT' "
+ " THEN '" + ItemPrivileges.PREVIEW + "' "
+ " ELSE '" + ItemPrivileges.VIEW_PUBLISHED + "' "
+ " END"
+ " )"
+ " )"
+ " OR true = :isSystemUser OR true = :isAdmin"
+ " )"
) )
}) })
public class ContentItem extends CcmObject implements Serializable { public class ContentItem extends CcmObject implements Serializable {