mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.1 to HEAD
12983: Merged V2.1-A to V3.1 8668: Added authorityDisplayName 12985: Merged V2.1-A to V3.1 8706: (record-only) Build fixes after removing the guest user - DO NOT MERGE 12990: Merged V3.0 to V3.1 12922: Merged V2.2 to V3.0 12555: Fix ETWOTWO-972 (Remove Lookup Cache) 12558: Fix ETWOTWO-978 (L2 Cache removal for No Row Issues) 12928: Merged V2.2 to V3.0 11319: Fix for ETWOTWO-73 (missed merge ?) ___________________________________________________________________ Modified: svn:mergeinfo Merged /alfresco/BRANCHES/V2.1-A:r8668,8706 Merged /alfresco/BRANCHES/V3.0:r12922,12928 Merged /alfresco/BRANCHES/V2.2:r12555,12558 Merged /alfresco/BRANCHES/V3.1:r12983,12985,12990 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13546 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -69,6 +69,7 @@ import org.alfresco.util.DNSNameMangler;
|
||||
import org.alfresco.util.ParameterCheck;
|
||||
import org.alfresco.wcm.sandbox.SandboxFactory;
|
||||
import org.alfresco.wcm.sandbox.SandboxInfo;
|
||||
import org.alfresco.wcm.sandbox.SandboxFactory.UserRoleWrapper;
|
||||
import org.alfresco.wcm.util.WCMUtil;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -790,9 +791,19 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
|
||||
private String getWebUserRoleImpl(NodeRef wpNodeRef, String userName)
|
||||
{
|
||||
long start = System.currentTimeMillis();
|
||||
NodeRef userRef = getWebUserRef(wpNodeRef, userName);
|
||||
String userRole = null;
|
||||
|
||||
|
||||
if (userRef != null)
|
||||
{
|
||||
userRole = (String)nodeService.getProperty(userRef, WCMAppModel.PROP_WEBUSERROLE);
|
||||
}
|
||||
|
||||
return userRole;
|
||||
}
|
||||
|
||||
private NodeRef getWebUserRef(NodeRef wpNodeRef, String userName)
|
||||
{
|
||||
StringBuilder query = new StringBuilder(128);
|
||||
query.append("+PARENT:\"").append(wpNodeRef).append("\" ");
|
||||
query.append("+TYPE:\"").append(WCMAppModel.TYPE_WEBUSER).append("\" ");
|
||||
@@ -820,27 +831,23 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
|
||||
if (nodes.size() == 1)
|
||||
{
|
||||
userRole = (String)nodeService.getProperty(nodes.get(0), WCMAppModel.PROP_WEBUSERROLE);
|
||||
return nodes.get(0);
|
||||
}
|
||||
else if (nodes.size() == 0)
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("getWebProjectUserRole: user role not found for " + userName);
|
||||
logger.trace("getWebUserRef: web user ("+userName+") not found in web project: "+wpNodeRef);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn("getWebProjectUserRole: more than one user role found for " + userName);
|
||||
logger.error("getWebUserRef: more than one web user ("+userName+") found in web project: "+wpNodeRef);
|
||||
}
|
||||
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("getWebProjectUserRole: "+userName+" "+userRole+" in "+(System.currentTimeMillis()-start)+" ms");
|
||||
}
|
||||
|
||||
return userRole;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.alfresco.wcm.webproject.WebProjectService#findWebProjectNodeFromPath(java.lang.String)
|
||||
@@ -889,7 +896,9 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
|
||||
// build a list of managers who will have full permissions on ALL staging areas
|
||||
List<String> managers = new ArrayList<String>(4);
|
||||
Set<String> existingUsers = new HashSet<String>(8);
|
||||
Map<String, NodeRef> webSiteUsers = new HashMap<String, NodeRef>(8);
|
||||
List<String> managersToRemove = new LinkedList<String>();
|
||||
List<UserRoleWrapper> usersToUpdate = new LinkedList<UserRoleWrapper>();
|
||||
|
||||
// retrieve the list of managers from the existing users
|
||||
for (Map.Entry<String, String> userRole : userGroupRoles.entrySet())
|
||||
@@ -906,19 +915,21 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, String> existingUserRoles = listWebUsers(wpNodeRef);
|
||||
for (Map.Entry<String, String> userRole : existingUserRoles.entrySet())
|
||||
List<ChildAssociationRef> userInfoRefs = nodeService.getChildAssocs(wpNodeRef, WCMAppModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
|
||||
|
||||
for (ChildAssociationRef ref : userInfoRefs)
|
||||
{
|
||||
String username = userRole.getKey();
|
||||
String userrole = userRole.getValue();
|
||||
|
||||
NodeRef userInfoRef = ref.getChildRef();
|
||||
String username = (String)nodeService.getProperty(userInfoRef, WCMAppModel.PROP_WEBUSERNAME);
|
||||
String userrole = (String)nodeService.getProperty(userInfoRef, WCMAppModel.PROP_WEBUSERROLE);
|
||||
|
||||
if (WCMUtil.ROLE_CONTENT_MANAGER.equals(userrole) && managers.contains(username) == false)
|
||||
{
|
||||
managers.add(username);
|
||||
}
|
||||
|
||||
// add each existing user to the exclude this - we cannot add them more than once!
|
||||
existingUsers.add(username);
|
||||
// add each existing user to the map which will be rechecked for update changed user permissions
|
||||
webSiteUsers.put(username, userInfoRef);
|
||||
}
|
||||
|
||||
List<SandboxInfo> sandboxInfoList = new LinkedList<SandboxInfo>();
|
||||
@@ -933,7 +944,7 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
|
||||
for (String userAuth : findNestedUserAuthorities(authority))
|
||||
{
|
||||
if (existingUsers.contains(userAuth) == false)
|
||||
if (webSiteUsers.keySet().contains(userAuth) == false)
|
||||
{
|
||||
if (autoCreateAuthorSandbox)
|
||||
{
|
||||
@@ -955,18 +966,54 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.warn("User '"+userAuth+"' already invited to web project: "+wpNodeRef+"(store id: "+wpStoreId+")");
|
||||
// TODO - split out into separate 'change role'
|
||||
// if user role have been changed then update required properties etc.
|
||||
NodeRef userRef = webSiteUsers.get(userAuth);
|
||||
String oldUserRole = (String)nodeService.getProperty(userRef, WCMAppModel.PROP_WEBUSERROLE);
|
||||
|
||||
if (!role.equals(oldUserRole))
|
||||
{
|
||||
// change in role
|
||||
Map<QName, Serializable> props = nodeService.getProperties(userRef);
|
||||
props.put(WCMAppModel.PROP_WEBUSERNAME, userAuth);
|
||||
props.put(WCMAppModel.PROP_WEBUSERROLE, role);
|
||||
nodeService.setProperties(userRef, props);
|
||||
|
||||
if (WCMUtil.ROLE_CONTENT_MANAGER.equals(role))
|
||||
{
|
||||
managersUpdateRequired = true;
|
||||
}
|
||||
else if (WCMUtil.ROLE_CONTENT_MANAGER.equals(oldUserRole))
|
||||
{
|
||||
managersToRemove.add(userAuth);
|
||||
}
|
||||
|
||||
usersToUpdate.add(sandboxFactory.new UserRoleWrapper(userAuth, oldUserRole, role));
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug(userAuth +"'s role has been changed from '" + oldUserRole +
|
||||
"' to '" + role + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Bind the post-commit transaction listener with data required for virtualization server notification
|
||||
CreateSandboxTransactionListener tl = new CreateSandboxTransactionListener(sandboxInfoList, listWebApps(wpNodeRef));
|
||||
AlfrescoTransactionSupport.bindListener(tl);
|
||||
|
||||
if (managersUpdateRequired == true)
|
||||
{
|
||||
sandboxFactory.updateSandboxManagers(wpStoreId, wpNodeRef, managers);
|
||||
sandboxFactory.updateSandboxManagers(wpStoreId, managers);
|
||||
}
|
||||
|
||||
// TODO - split out into separate 'change role'
|
||||
// remove ex-managers from sandboxes
|
||||
if (managersToRemove.size() != 0)
|
||||
{
|
||||
sandboxFactory.removeSandboxManagers(wpStoreId, managersToRemove);
|
||||
}
|
||||
|
||||
// get permissions and roles for a web project folder type
|
||||
@@ -990,6 +1037,13 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO - split out into separate 'change role'
|
||||
// update user's roles
|
||||
if (usersToUpdate.size() != 0)
|
||||
{
|
||||
sandboxFactory.updateSandboxRoles(wpStoreId, usersToUpdate, perms);
|
||||
}
|
||||
|
||||
if (logger.isInfoEnabled())
|
||||
{
|
||||
@@ -1027,29 +1081,65 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
WebProjectInfo wpInfo = getWebProject(wpNodeRef);
|
||||
final String wpStoreId = wpInfo.getStoreId();
|
||||
|
||||
if (isWebUser(wpNodeRef, userAuth))
|
||||
// build a list of managers who will have full permissions on ALL staging areas
|
||||
List<String> managers = new ArrayList<String>(4);
|
||||
|
||||
// retrieve the list of managers from the existing users
|
||||
Map<String, String> existingUserRoles = listWebUsers(wpNodeRef);
|
||||
for (Map.Entry<String, String> userRole : existingUserRoles.entrySet())
|
||||
{
|
||||
logger.warn("User '"+userAuth+"' already invited to web project: "+wpNodeRef+" (store id: "+wpStoreId+")");
|
||||
return;
|
||||
String username = userRole.getKey();
|
||||
String userrole = userRole.getValue();
|
||||
|
||||
if (WCMUtil.ROLE_CONTENT_MANAGER.equals(userrole) && managers.contains(username) == false)
|
||||
{
|
||||
managers.add(username);
|
||||
}
|
||||
}
|
||||
|
||||
// get permissions and roles for a web project folder type
|
||||
Set<String> perms = permissionService.getSettablePermissions(WCMAppModel.TYPE_AVMWEBFOLDER);
|
||||
|
||||
NodeRef userRef = getWebUserRef(wpNodeRef, userAuth);
|
||||
if (userRef != null)
|
||||
{
|
||||
// TODO - split out into separate 'change role'
|
||||
// if user role has been changed then update required properties etc.
|
||||
String oldUserRole = (String)nodeService.getProperty(userRef, WCMAppModel.PROP_WEBUSERROLE);
|
||||
if (!role.equals(oldUserRole))
|
||||
{
|
||||
// change in role
|
||||
Map<QName, Serializable> props = nodeService.getProperties(userRef);
|
||||
props.put(WCMAppModel.PROP_WEBUSERNAME, userAuth);
|
||||
props.put(WCMAppModel.PROP_WEBUSERROLE, role);
|
||||
nodeService.setProperties(userRef, props);
|
||||
|
||||
if (WCMUtil.ROLE_CONTENT_MANAGER.equals(role))
|
||||
{
|
||||
managers.add(userAuth);
|
||||
sandboxFactory.updateSandboxManagers(wpStoreId, managers);
|
||||
}
|
||||
else if (WCMUtil.ROLE_CONTENT_MANAGER.equals(oldUserRole))
|
||||
{
|
||||
List<String> managersToRemove = new LinkedList<String>();
|
||||
managersToRemove.add(userAuth);
|
||||
|
||||
sandboxFactory.removeSandboxManagers(wpStoreId, managersToRemove);
|
||||
}
|
||||
|
||||
List<UserRoleWrapper> usersToUpdate = new LinkedList<UserRoleWrapper>();
|
||||
usersToUpdate.add(sandboxFactory.new UserRoleWrapper(userAuth, oldUserRole, role));
|
||||
|
||||
sandboxFactory.updateSandboxRoles(wpStoreId, usersToUpdate, perms);
|
||||
|
||||
if (logger.isInfoEnabled())
|
||||
{
|
||||
logger.info("Web user "+userAuth +"'s role has been changed from '" + oldUserRole + "' to '" + role + "' (store id: "+wpStoreId+")");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// build a list of managers who will have full permissions on ALL staging areas
|
||||
List<String> managers = new ArrayList<String>(4);
|
||||
|
||||
// retrieve the list of managers from the existing users
|
||||
Map<String, String> existingUserRoles = listWebUsers(wpNodeRef);
|
||||
for (Map.Entry<String, String> userRole : existingUserRoles.entrySet())
|
||||
{
|
||||
String username = userRole.getKey();
|
||||
String userrole = userRole.getValue();
|
||||
|
||||
if (WCMUtil.ROLE_CONTENT_MANAGER.equals(userrole) && managers.contains(username) == false)
|
||||
{
|
||||
managers.add(username);
|
||||
}
|
||||
}
|
||||
|
||||
if (autoCreateAuthorSandbox)
|
||||
{
|
||||
// create a sandbox for the user with permissions based on role
|
||||
@@ -1068,7 +1158,7 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
if (WCMUtil.ROLE_CONTENT_MANAGER.equals(role))
|
||||
{
|
||||
managers.add(userAuth);
|
||||
sandboxFactory.updateSandboxManagers(wpStoreId, wpNodeRef, managers);
|
||||
sandboxFactory.updateSandboxManagers(wpStoreId, managers);
|
||||
}
|
||||
|
||||
sandboxFactory.addStagingAreaUser(wpStoreId, userAuth, role);
|
||||
@@ -1076,9 +1166,6 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
||||
// create an app:webuser instance for the user and assoc to the web project node
|
||||
createWebUser(wpNodeRef, userAuth, role);
|
||||
|
||||
// get permissions and roles for a web project folder type
|
||||
Set<String> perms = permissionService.getSettablePermissions(WCMAppModel.TYPE_AVMWEBFOLDER);
|
||||
|
||||
// set permissions for the user
|
||||
for (String permission : perms)
|
||||
{
|
||||
|
Reference in New Issue
Block a user