mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged DEV to HEAD
- ALF-8806 RINF 41: Lucene Removal: Fix CopyService - ALF-9028: RINF 41: Fix Aspect cm:copiedFrom - ALF-9029 RINF 49: Lucene Removal: CheckOutCheckInService API - ALF-9032: RINF 49: fixes to cm:workingcopy aspect 28996: Dev branch for De-Lucene work pending patches 29004: Evaluator runs in read-only txn 29006: Additional PermissionCheckedCollection.create method - Use an existing collection's permission check data (cut-off, etc) to wrap a new collection 29007: CopyService and CheckOutCheckInService refactors to remove Lucene CopyService: Removed cm:source property from cm:copiedfrom aspect and replaced with a cm:original association. Added CQ-based APIs to query for copies Added APIs to support bi-directional walking of copy association Fixed sundry uses of cm:copiedfrom esp. all uses related to cm:workingcopy CheckOutCheckInService: Check-out now creates a source aspect cm:checkedOut with 1:1 relationship to cm:workingcopy via cm:workingcopylink Removed explicit use of cm:workingcopy aspect and replaced it with calls to COCI API 29083: Audit tests fail when indexing is turned off. Also removed a getReader() call during rule evaluation, leading to a 'sub-action' read being recorded. 29113: NodeDAO.getNodesWithAspects supports paging 29135: Removed unused patch queries 29139: Basic patch (still terminates with error) to upgrade cm:copiedfrom and cm:workingcopy 29157: Tested patch for cm:copiedfrom and cm:workingcopy aspects git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29159 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -95,6 +95,31 @@ public interface PermissionCheckedCollection<T>
|
||||
{
|
||||
return sizeOriginal;
|
||||
}
|
||||
/**
|
||||
* Helper method to create a {@link PermissionCheckedCollection} from an existing <code>Collection</code>
|
||||
* by applying the same values as present on a potentially permission-checked source. If the
|
||||
* existing checked source is <b>NOT</b> permission-checked, then the collection will not be
|
||||
* decorated.
|
||||
*
|
||||
* @param <TT> the type of the <code>Collection</code>
|
||||
* @param collection the <code>Collection</code> to proxy
|
||||
* @param checkedSource a collection that might implement {@link PermissionCheckedCollection}
|
||||
* @return a <code>Collection</code> of the same type but including the
|
||||
* {@link PermissionCheckedCollection} interface
|
||||
*/
|
||||
public static final <TT> Collection<TT> create(
|
||||
Collection<TT> collection, Collection<?> checkedSource)
|
||||
{
|
||||
if (checkedSource instanceof PermissionCheckedCollection)
|
||||
{
|
||||
PermissionCheckedCollection<?> source = (PermissionCheckedCollection<?>) checkedSource;
|
||||
return create(collection, source.isCutOff(), source.sizeUnchecked(), source.sizeOriginal());
|
||||
}
|
||||
else
|
||||
{
|
||||
return collection;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Helper method to create a {@link PermissionCheckedCollection} from an existing <code>Collection</code>
|
||||
*
|
||||
|
@@ -18,26 +18,24 @@
|
||||
*/
|
||||
package org.alfresco.repo.security.permissions.dynamic;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
||||
import org.alfresco.repo.security.permissions.DynamicAuthority;
|
||||
import org.alfresco.repo.security.permissions.PermissionReference;
|
||||
import org.alfresco.repo.security.permissions.impl.ModelDAO;
|
||||
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
||||
import org.alfresco.service.cmr.lock.LockService;
|
||||
import org.alfresco.service.cmr.lock.LockStatus;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
import org.springframework.extensions.surf.util.AbstractLifecycleBean;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
|
||||
/**
|
||||
* LockOwnerDynamicAuthority
|
||||
@@ -46,7 +44,7 @@ public class LockOwnerDynamicAuthority extends AbstractLifecycleBean implements
|
||||
{
|
||||
private LockService lockService;
|
||||
|
||||
private NodeService nodeService;
|
||||
private CheckOutCheckInService checkOutCheckInService;
|
||||
|
||||
private ModelDAO modelDAO;
|
||||
|
||||
@@ -64,22 +62,10 @@ public class LockOwnerDynamicAuthority extends AbstractLifecycleBean implements
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (nodeService.hasAspect(nodeRef, ContentModel.ASPECT_WORKING_COPY))
|
||||
NodeRef original = checkOutCheckInService.getCheckedOut(nodeRef);
|
||||
if (original != null)
|
||||
{
|
||||
NodeRef original = null;
|
||||
Serializable reference = nodeService.getProperty(nodeRef, ContentModel.PROP_COPY_REFERENCE);
|
||||
if (reference != null)
|
||||
{
|
||||
original = DefaultTypeConverter.INSTANCE.convert(NodeRef.class, reference);
|
||||
}
|
||||
if (original != null && nodeService.exists(original))
|
||||
{
|
||||
return (lockService.getLockStatus(original, userName) == LockStatus.LOCK_OWNER);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return (lockService.getLockStatus(original, userName) == LockStatus.LOCK_OWNER);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -99,8 +85,11 @@ public class LockOwnerDynamicAuthority extends AbstractLifecycleBean implements
|
||||
@Override
|
||||
protected void onBootstrap(ApplicationEvent event)
|
||||
{
|
||||
ApplicationContext ctx = super.getApplicationContext();
|
||||
checkOutCheckInService = (CheckOutCheckInService) ctx.getBean("checkOutCheckInService");
|
||||
|
||||
PropertyCheck.mandatory(this, "lockService", lockService);
|
||||
PropertyCheck.mandatory(this, "nodeService", nodeService);
|
||||
PropertyCheck.mandatory(this, "checkOutCheckInService", checkOutCheckInService);
|
||||
PropertyCheck.mandatory(this, "modelDAO", modelDAO);
|
||||
|
||||
// Build the permission set
|
||||
@@ -126,7 +115,6 @@ public class LockOwnerDynamicAuthority extends AbstractLifecycleBean implements
|
||||
|
||||
/**
|
||||
* Set the lock service
|
||||
* @param lockService
|
||||
*/
|
||||
public void setLockService(LockService lockService)
|
||||
{
|
||||
@@ -134,17 +122,17 @@ public class LockOwnerDynamicAuthority extends AbstractLifecycleBean implements
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the node service
|
||||
* @param nodeService
|
||||
* Service to get the check-in details. This is not used for Spring configuration
|
||||
* because it requires a permission-wrapped public service that in turn depends on
|
||||
* this component.
|
||||
*/
|
||||
public void setNodeService(NodeService nodeService)
|
||||
public void setCheckOutCheckInService(CheckOutCheckInService checkOutCheckInService)
|
||||
{
|
||||
this.nodeService = nodeService;
|
||||
this.checkOutCheckInService = checkOutCheckInService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the permissions model dao
|
||||
* @param modelDAO
|
||||
*/
|
||||
public void setModelDAO(ModelDAO modelDAO)
|
||||
{
|
||||
@@ -153,14 +141,12 @@ public class LockOwnerDynamicAuthority extends AbstractLifecycleBean implements
|
||||
|
||||
/**
|
||||
* Set the permissions for which this dynamic authority is required
|
||||
* @param requiredFor
|
||||
*/
|
||||
public void setRequiredFor(List<String> requiredFor)
|
||||
{
|
||||
this.requiredFor = requiredFor;
|
||||
}
|
||||
|
||||
|
||||
public Set<PermissionReference> requiredFor()
|
||||
{
|
||||
return whenRequired;
|
||||
|
@@ -54,33 +54,23 @@ import org.springframework.context.ApplicationContext;
|
||||
* Test the lock owner dynamic authority
|
||||
*
|
||||
* @author andyh
|
||||
*
|
||||
*/
|
||||
public class LockOwnerDynamicAuthorityTest extends TestCase
|
||||
{
|
||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
||||
|
||||
private NodeService nodeService;
|
||||
|
||||
private MutableAuthenticationService authenticationService;
|
||||
|
||||
private AuthenticationComponent authenticationComponent;
|
||||
|
||||
private MutableAuthenticationDao authenticationDAO;
|
||||
|
||||
private LockService lockService;
|
||||
|
||||
private NodeRef rootNodeRef;
|
||||
|
||||
private UserTransaction userTransaction;
|
||||
|
||||
private PermissionService permissionService;
|
||||
|
||||
private LockOwnerDynamicAuthority dynamicAuthority;
|
||||
|
||||
private CheckOutCheckInService checkOutCheckInService;
|
||||
|
||||
private OwnableService ownableService;
|
||||
|
||||
private NodeRef rootNodeRef;
|
||||
private UserTransaction userTransaction;
|
||||
|
||||
/**
|
||||
*
|
||||
|
Reference in New Issue
Block a user