dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #32550
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 16607: wip, criteria for sharing
------------------------------------------------------------
revno: 16607
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2014-09-02 12:23:24 +0700
message:
wip, criteria for sharing
modified:
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/hibernate/HibernateIdentifiableObjectStore.java
dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/hibernate/HibernateIdentifiableObjectStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/hibernate/HibernateIdentifiableObjectStore.java 2014-08-15 07:40:20 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/hibernate/HibernateIdentifiableObjectStore.java 2014-09-02 05:23:24 +0000
@@ -28,11 +28,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
@@ -45,6 +40,11 @@
import org.hisp.dhis.hibernate.exception.ReadAccessDeniedException;
import org.hisp.dhis.user.User;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
/**
* @author bobj
*/
@@ -97,7 +97,7 @@
{
return null;
}
-
+
T object = getObject( Restrictions.eq( "uid", uid ) );
if ( !isReadAllowed( object ) )
@@ -116,7 +116,7 @@
{
return null;
}
-
+
return getObject( Restrictions.eq( "uid", uid ) );
}
@@ -163,7 +163,7 @@
{
return null;
}
-
+
T object = getObject( Restrictions.eq( "code", code ) );
if ( !isReadAllowed( object ) )
@@ -176,7 +176,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllEqName( String name )
{
Query query = sharingEnabled() ? getQueryAllEqNameAcl( name ) : getQueryAllEqName( name );
@@ -208,7 +208,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllEqNameIgnoreCase( String name )
{
Query query = sharingEnabled() ? getQueryAllEqNameAclIgnoreCase( name ) : getQueryAllEqNameIgnoreCase( name );
@@ -240,7 +240,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllEqShortName( String shortName )
{
Query query = sharingEnabled() ? getQueryAllEqShortNameAcl( shortName ) : getQueryAllEqShortName( shortName );
@@ -272,7 +272,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllEqShortNameIgnoreCase( String shortName )
{
Query query = sharingEnabled() ? getQueryAllEqShortNameAclIgnoreCase( shortName ) : getQueryAllEqShortNameIgnoreCase( shortName );
@@ -304,7 +304,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllLikeName( String name )
{
Query query = sharingEnabled() ? getQueryAllLikeNameAcl( name ) : getQueryAllLikeName( name );
@@ -336,7 +336,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllLikeShortName( String shortName )
{
if ( NameableObject.class.isAssignableFrom( clazz ) )
@@ -372,7 +372,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllOrderedName()
{
Query query = sharingEnabled() ? getQueryAllOrderedNameAcl() : getQueryAllOrderedName();
@@ -400,9 +400,16 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllOrderedName( int first, int max )
{
+ /*
+ return getSharingCriteria()
+ .setFirstResult( first )
+ .setMaxResults( max )
+ .list();
+ */
+
Query query = sharingEnabled() ? getQueryAllOrderedNameAcl() : getQueryAllOrderedName();
query.setFirstResult( first );
@@ -412,7 +419,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllOrderedLastUpdated( int first, int max )
{
Query query = sharingEnabled() ? getQueryAllOrderedLastUpdatedAcl() : getQueryAllOrderedLastUpdated();
@@ -443,7 +450,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllLikeNameOrderedName( String name, int first, int max )
{
Query query = sharingEnabled() ? getQueryAllLikeNameOrderedNameAcl( name ) : getQueryAllLikeNameOrderedName( name );
@@ -540,7 +547,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllGeLastUpdated( Date lastUpdated )
{
Query query = sharingEnabled() ? getQueryAllGeLastUpdatedAcl( lastUpdated ) : getQueryAllGeLastUpdated( lastUpdated );
@@ -572,7 +579,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllGeCreated( Date created )
{
Query query = sharingEnabled() ? getQueryAllGeCreatedAcl( created ) : getQueryAllGeCreated( created );
@@ -604,7 +611,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getAllGeLastUpdatedOrderedName( Date lastUpdated )
{
Query query = sharingEnabled() ? getQueryAllGeLastUpdatedOrderedNameAcl( lastUpdated ) : getQueryAllGeLastUpdatedOrderedName( lastUpdated );
@@ -636,7 +643,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getByUser( User user )
{
Query query = getQuery( "from " + clazz.getName() + " c where user = :user" );
@@ -646,7 +653,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public List<T> getByDataDimension( boolean dataDimension )
{
Query query = getQuery( "from " + clazz.getName() + " c where c.dataDimension = :dataDimension" );
@@ -654,7 +661,7 @@
return query.list();
}
-
+
@Override
public List<T> getByUid( Collection<String> uids )
{
=== modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java'
--- dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java 2014-08-14 05:46:19 +0000
+++ dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java 2014-09-02 05:23:24 +0000
@@ -36,6 +36,11 @@
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.DetachedCriteria;
+import org.hibernate.criterion.Disjunction;
+import org.hibernate.criterion.Projections;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.criterion.Subqueries;
import org.hisp.dhis.acl.AccessStringHelper;
import org.hisp.dhis.acl.AclService;
import org.hisp.dhis.common.AuditLogUtil;
@@ -172,6 +177,47 @@
return getClazzCriteria().setCacheable( cacheable );
}
+ protected final Disjunction getSharingDisjunction()
+ {
+ Disjunction disjunction = Restrictions.disjunction();
+
+ disjunction.add( Restrictions.like( "publicAccess", "r%" ) );
+ disjunction.add( Restrictions.isNull( "user" ) );
+ disjunction.add( Restrictions.eq( "user", currentUserService.getCurrentUser() ) );
+
+ DetachedCriteria detachedCriteria = DetachedCriteria.forClass( UserGroupAccess.class, "uga" );
+ detachedCriteria.createAlias( "uga.userGroup", "ug" );
+ detachedCriteria.createAlias( "ug.members", "ugm" );
+
+ detachedCriteria.add( Restrictions.like( "uga.access", "r%" ) );
+ detachedCriteria.add( Restrictions.eq( "ugm.id", currentUserService.getCurrentUser().getId() ) );
+
+ detachedCriteria.setProjection( Projections.id() );
+
+ disjunction.add( Subqueries.exists( detachedCriteria ) );
+
+ return disjunction;
+ }
+
+ /**
+ * Creates a Criteria for the implementation Class type.
+ *
+ * @return a Criteria instance.
+ */
+ protected final Criteria getSharingCriteria()
+ {
+ Criteria criteria = getCriteria();
+
+ if ( !sharingEnabled() )
+ {
+ return criteria;
+ }
+
+ criteria.add( getSharingDisjunction() );
+
+ return criteria;
+ }
+
protected Criteria getClazzCriteria()
{
return sessionFactory.getCurrentSession().createCriteria( getClazz() );
@@ -203,7 +249,7 @@
* @param expressions the Criterions for the Criteria.
* @return an object of the implementation Class type.
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
protected final T getObject( Criterion... expressions )
{
return (T) getCriteria( expressions ).uniqueResult();
@@ -215,7 +261,7 @@
* @param expressions the Criterions for the Criteria.
* @return a List with objects of the implementation Class type.
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
protected final List<T> getList( Criterion... expressions )
{
return getCriteria( expressions ).list();
@@ -291,7 +337,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public final T get( int id )
{
T object = (T) sessionFactory.getCurrentSession().get( getClazz(), id );
@@ -306,7 +352,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public final T load( int id )
{
T object = (T) sessionFactory.getCurrentSession().load( getClazz(), id );
@@ -338,7 +384,7 @@
}
@Override
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
public final List<T> getAll()
{
Query query = sharingEnabled() ? getQueryAllAcl() : getQueryAll();
@@ -405,6 +451,8 @@
@Override
public int getCount()
{
+ // return getSharingCriteria().list().size();
+
Query query = sharingEnabled() ? getQueryCountAcl() : getQueryCount();
return ((Long) query.uniqueResult()).intValue();
@@ -439,10 +487,8 @@
protected boolean sharingEnabled()
{
- boolean enabled = forceAcl() || (aclService.isShareable( clazz ) && !(currentUserService.getCurrentUser() == null ||
+ return forceAcl() || (aclService.isShareable( clazz ) && !(currentUserService.getCurrentUser() == null ||
CollectionUtils.containsAny( currentUserService.getCurrentUser().getUserCredentials().getAllAuthorities(), AclService.ACL_OVERRIDE_AUTHORITIES )));
-
- return enabled;
}
protected boolean isReadAllowed( T object )