mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
RM-1751 (Merge performance improvements made for RM 2.1.0.3 onto RM 2.2.1)
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.2@89348 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -82,36 +82,96 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
|
||||
/** root container cache */
|
||||
private SimpleCache<Pair<NodeRef, String>, NodeRef> rootContainerCache;
|
||||
|
||||
/** File plan role service */
|
||||
private FilePlanRoleService filePlanRoleService;
|
||||
|
||||
/** Permission service */
|
||||
private PermissionService permissionService;
|
||||
|
||||
/** Node DAO */
|
||||
private NodeDAO nodeDAO;
|
||||
|
||||
/** Site service */
|
||||
private SiteService siteService;
|
||||
|
||||
/**
|
||||
* @return file plan role service
|
||||
* Gets the file plan role service
|
||||
*
|
||||
* @return The file plan role service
|
||||
*/
|
||||
protected FilePlanRoleService getFilePlanRoleService()
|
||||
public FilePlanRoleService getFilePlanRoleService()
|
||||
{
|
||||
return (FilePlanRoleService)applicationContext.getBean("FilePlanRoleService");
|
||||
return this.filePlanRoleService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return permission service
|
||||
* Sets the file plan role service
|
||||
*
|
||||
* @param filePlanRoleService The file plan role service
|
||||
*/
|
||||
protected PermissionService getPermissionService()
|
||||
public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService)
|
||||
{
|
||||
return (PermissionService)applicationContext.getBean("permissionService");
|
||||
this.filePlanRoleService = filePlanRoleService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return node DAO
|
||||
* Gets the permission service
|
||||
*
|
||||
* @return The permission service
|
||||
*/
|
||||
protected NodeDAO getNodeDAO()
|
||||
public PermissionService getPermissionService()
|
||||
{
|
||||
return (NodeDAO)applicationContext.getBean("nodeDAO");
|
||||
return this.permissionService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return site service
|
||||
* Sets the permission service
|
||||
*
|
||||
* @param permissionService The permission service
|
||||
*/
|
||||
protected SiteService getSiteService()
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
return (SiteService)applicationContext.getBean("siteService");
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the node DAO
|
||||
*
|
||||
* @return The node DAO
|
||||
*/
|
||||
public NodeDAO getNodeDAO()
|
||||
{
|
||||
return this.nodeDAO;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the node DAO
|
||||
*
|
||||
* @param nodeDAO The node DAO
|
||||
*/
|
||||
public void setNodeDAO(NodeDAO nodeDAO)
|
||||
{
|
||||
this.nodeDAO = nodeDAO;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the site service
|
||||
*
|
||||
* @return The site service
|
||||
*/
|
||||
public SiteService getSiteService()
|
||||
{
|
||||
return this.siteService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the site service
|
||||
*
|
||||
* @param siteService The site service
|
||||
*/
|
||||
public void setSiteService(SiteService siteService)
|
||||
{
|
||||
this.siteService = siteService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -166,12 +226,11 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
|
||||
public NodeRef getFilePlanBySiteId(String siteId)
|
||||
{
|
||||
NodeRef filePlan = null;
|
||||
SiteService siteService = getSiteService();
|
||||
|
||||
SiteInfo siteInfo = siteService.getSite(siteId);
|
||||
if (siteInfo != null && siteService.hasContainer(siteId, FILE_PLAN_CONTAINER))
|
||||
SiteInfo siteInfo = getSiteService().getSite(siteId);
|
||||
if (siteInfo != null && getSiteService().hasContainer(siteId, FILE_PLAN_CONTAINER))
|
||||
{
|
||||
NodeRef nodeRef = siteService.getContainer(siteId, FILE_PLAN_CONTAINER);
|
||||
NodeRef nodeRef = getSiteService().getContainer(siteId, FILE_PLAN_CONTAINER);
|
||||
if (instanceOf(nodeRef, TYPE_FILE_PLAN))
|
||||
{
|
||||
filePlan = nodeRef;
|
||||
|
@@ -23,7 +23,6 @@ import static org.alfresco.module.org_alfresco_module_rm.security.ExtendedWriter
|
||||
import static org.alfresco.repo.policy.Behaviour.NotificationFrequency.TRANSACTION_COMMIT;
|
||||
import static org.alfresco.repo.policy.annotation.BehaviourKind.CLASS;
|
||||
import static org.alfresco.repo.security.authentication.AuthenticationUtil.getSystemUserName;
|
||||
import static org.alfresco.service.cmr.security.AccessStatus.ALLOWED;
|
||||
import static org.alfresco.service.cmr.security.OwnableService.NO_OWNER;
|
||||
import static org.alfresco.util.ParameterCheck.mandatory;
|
||||
import static org.apache.commons.lang.BooleanUtils.isTrue;
|
||||
@@ -43,7 +42,6 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.security.AccessPermission;
|
||||
import org.alfresco.service.cmr.security.AccessStatus;
|
||||
import org.alfresco.service.cmr.security.OwnableService;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
@@ -247,45 +245,39 @@ public class FilePlanPermissionServiceImpl extends ServiceBaseImpl
|
||||
|
||||
if (nodeService.exists(nodeRef) && nodeService.exists(parent))
|
||||
{
|
||||
// initialise permissions
|
||||
initPermissions(nodeRef, parent);
|
||||
|
||||
runAsSystem(new AuthenticationUtil.RunAsWork<Object>()
|
||||
{
|
||||
public Object doWork()
|
||||
{
|
||||
// setup inherited permissions
|
||||
Set<AccessPermission> perms = getPermissionService().getAllSetPermissions(parent);
|
||||
for (AccessPermission perm : perms)
|
||||
{
|
||||
// don't copy the extended reader or writer permissions as they have already been set
|
||||
String authority = perm.getAuthority();
|
||||
if (!EXTENDED_READER.equals(authority) &&
|
||||
!EXTENDED_WRITER.equals(authority))
|
||||
{
|
||||
// get the access status details
|
||||
AccessStatus accessStatus = perm.getAccessStatus();
|
||||
boolean allow = false;
|
||||
if (ALLOWED.equals(accessStatus))
|
||||
{
|
||||
allow = true;
|
||||
}
|
||||
// set inheritance
|
||||
boolean isParentNodeFilePlan = isRecordCategory(nodeRef) && isFilePlan(parent);
|
||||
boolean inheritanceAllowed = isInheritanceAllowed(nodeRef, isParentNodeFilePlan);
|
||||
getPermissionService().setInheritParentPermissions(nodeRef, inheritanceAllowed);
|
||||
|
||||
// set the permission on the target node
|
||||
getPermissionService().setPermission(
|
||||
nodeRef,
|
||||
authority,
|
||||
perm.getPermission(),
|
||||
allow);
|
||||
}
|
||||
// clear all existing permissions
|
||||
getPermissionService().clearPermission(nodeRef, null);
|
||||
|
||||
if (!inheritanceAllowed)
|
||||
{
|
||||
// set extended reader permissions
|
||||
getPermissionService().setPermission(nodeRef, EXTENDED_READER, READ_RECORDS, true);
|
||||
getPermissionService().setPermission(nodeRef, EXTENDED_WRITER, FILING, true);
|
||||
}
|
||||
|
||||
// remove owner
|
||||
getOwnableService().setOwner(nodeRef, NO_OWNER);
|
||||
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isInheritanceAllowed(NodeRef nodeRef, Boolean isParentNodeFilePlan)
|
||||
{
|
||||
return !(isFilePlan(nodeRef) || isTransfer(nodeRef) || isHold(nodeRef) || isUnfiledRecordsContainer(nodeRef) || (isRecordCategory(nodeRef) && isTrue(isParentNodeFilePlan)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets ups records permission when aspect is added.
|
||||
*
|
||||
@@ -371,53 +363,6 @@ public class FilePlanPermissionServiceImpl extends ServiceBaseImpl
|
||||
}, getSystemUserName());
|
||||
}
|
||||
|
||||
private void initPermissions(final NodeRef nodeRef, final boolean isParentNodeFilePlan)
|
||||
{
|
||||
if (nodeService.exists(nodeRef))
|
||||
{
|
||||
runAsSystem(new AuthenticationUtil.RunAsWork<Object>()
|
||||
{
|
||||
public Object doWork()
|
||||
{
|
||||
// set inheritance
|
||||
boolean inheritanceAllowed = isInheritanceAllowed(nodeRef, isParentNodeFilePlan);
|
||||
getPermissionService().setInheritParentPermissions(nodeRef, inheritanceAllowed);
|
||||
|
||||
// clear all existing permissions
|
||||
getPermissionService().clearPermission(nodeRef, null);
|
||||
|
||||
if (!inheritanceAllowed)
|
||||
{
|
||||
// set extended reader permissions
|
||||
getPermissionService().setPermission(nodeRef, EXTENDED_READER, READ_RECORDS, true);
|
||||
getPermissionService().setPermission(nodeRef, EXTENDED_WRITER, FILING, true);
|
||||
}
|
||||
|
||||
// remove owner
|
||||
getOwnableService().setOwner(nodeRef, NO_OWNER);
|
||||
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Init the permissions for the given node.
|
||||
*
|
||||
* @param nodeRef node reference
|
||||
* @param includeInPlace true if in-place
|
||||
*/
|
||||
private void initPermissions(final NodeRef nodeRef, final NodeRef parent)
|
||||
{
|
||||
initPermissions(nodeRef, (isRecordCategory(nodeRef) && isFilePlan(parent)));
|
||||
}
|
||||
|
||||
private boolean isInheritanceAllowed(NodeRef nodeRef, Boolean isParentNodeFilePlan)
|
||||
{
|
||||
return !(isFilePlan(nodeRef) || isTransfer(nodeRef) || isHold(nodeRef) || isUnfiledRecordsContainer(nodeRef) || (isRecordCategory(nodeRef) && isTrue(isParentNodeFilePlan)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService#setPermission(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.lang.String, boolean)
|
||||
*/
|
||||
|
Reference in New Issue
Block a user