- Added initial definition of permissions/roles for ContentManager, ContentPublisher, ContentContributor and ContentReviewer
 - Create Website wizard shows only the rules defined for the avm webfolder type
 - Create Website wizard now creates appropriate child associations for user roles
 - User roles displayed in the website browse screen next to the user names
NOTE: Websites created before this change are NOT backward compatible and will need to be recreated!

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3948 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2006-09-27 13:24:00 +00:00
parent 32e1c7ddc5
commit ccdc66bf16
4 changed files with 51 additions and 35 deletions

View File

@@ -218,6 +218,10 @@ Collaborator=Collaborator
Contributor=Contributor
Editor=Editor
All=All
ContentManager=Content Manager
ContentPublisher=Content Publisher
ContentContributor=Content Contributor
ContentReviewer=Content Reviewer
# Actions
delete=Delete

View File

@@ -51,6 +51,8 @@ import org.apache.commons.logging.LogFactory;
*/
public class CreateWebsiteWizard extends BaseWizardBean
{
private static final String ROLE_CONTENT_MANAGER = "ContentManager";
private static Log logger = LogFactory.getLog(CreateWebsiteWizard.class);
protected String name;
@@ -113,24 +115,40 @@ public class CreateWebsiteWizard extends BaseWizardBean
outcome = wiz.finish();
if (outcome != null)
{
// create the AVM stores (layers) to represent the newly created location website
// create the AVM stores to represent the newly created location website
createStagingSandbox(this.name);
// create a sandbox for each user
// TODO: create sandbox appropriately based on role
List<String> invitedUsers = getInvitedUsernames(wiz);
// create a sandbox for each user appropriately with permissions based on role
boolean foundCurrentUser = false;
List<UserGroupRole> invitedUserRoles = (List<UserGroupRole>)wiz.getUserRolesDataModel().getWrappedData();
String currentUser = Application.getCurrentUser(context).getUserName();
if (invitedUsers.contains(currentUser) == false)
for (UserGroupRole userRole : invitedUserRoles)
{
invitedUsers.add(Application.getCurrentUser(context).getUserName());
if (currentUser.equals(userRole.getAuthority()))
{
foundCurrentUser = true;
}
for (String username : invitedUsers)
createUserSandbox(this.name, userRole.getAuthority(), userRole.getRole());
}
if (foundCurrentUser == false)
{
createUserSandbox(this.name, username);
createUserSandbox(this.name, currentUser, ROLE_CONTENT_MANAGER);
invitedUserRoles.add(new UserGroupRole(currentUser, ROLE_CONTENT_MANAGER, null));
}
// save the list of invited users against the store
this.nodeService.setProperty(nodeRef, ContentModel.PROP_USERSANDBOXES, (Serializable)invitedUsers);
for (UserGroupRole userRole : invitedUserRoles)
{
// create an app:webuser instance for each authority and assoc to the website node
Map<QName, Serializable> props = new HashMap<QName, Serializable>(2, 1.0f);
props.put(ContentModel.PROP_WEBUSERNAME, userRole.getAuthority());
props.put(ContentModel.PROP_WEBUSERROLE, userRole.getRole());
this.nodeService.createNode(nodeRef,
ContentModel.ASSOC_WEBUSER,
ContentModel.ASSOC_WEBUSER,
ContentModel.TYPE_WEBUSER,
props);
}
// set the property on the node to reference the AVM store
this.nodeService.setProperty(nodeRef, ContentModel.PROP_AVMSTORE, this.name);
@@ -327,8 +345,9 @@ public class CreateWebsiteWizard extends BaseWizardBean
*
* @param name The store name to create the sandbox for
* @param username Username of the user to create the sandbox for
* @param role Role permission for the user
*/
private void createUserSandbox(String name, String username)
private void createUserSandbox(String name, String username, String role)
{
// create the user 'main' store
String userStore = AVMConstants.buildAVMUserMainStoreName(name, username);
@@ -409,19 +428,4 @@ public class CreateWebsiteWizard extends BaseWizardBean
this.avmService.setStoreProperty(store, QName.createQName(null, dnsProp),
new PropertyValue(DataTypeDefinition.TEXT, path));
}
/**
* @return The list of invited usernames
*/
private List<String> getInvitedUsernames(InviteWebsiteUsersWizard wizard)
{
// add the list of invited users here
List<UserGroupRole> users = (List<UserGroupRole>)wizard.getUserRolesDataModel().getWrappedData();
List<String> invited = new ArrayList<String>(users.size());
for (UserGroupRole u : users)
{
invited.add(u.getAuthority());
}
return invited;
}
}

View File

@@ -52,8 +52,8 @@ public class InviteWebsiteUsersWizard extends InviteUsersWizard
{
if (this.folderPermissions == null)
{
// TODO: get permissions for a website folder type
this.folderPermissions = this.permissionService.getSettablePermissions(ContentModel.TYPE_FOLDER);
// get permissions and roles for a website folder type
this.folderPermissions = this.permissionService.getSettablePermissions(ContentModel.TYPE_AVMWEBFOLDER);
}
return this.folderPermissions;

View File

@@ -39,8 +39,10 @@ import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.avmsync.AVMDifference;
import org.alfresco.service.cmr.avmsync.AVMSyncService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.RegexQNamePattern;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.DownloadContentServlet;
import org.alfresco.web.bean.BrowseBean;
@@ -195,13 +197,17 @@ public class UIUserSandboxes extends SelfRenderingComponent
}
String storeRoot = (String)nodeService.getProperty(websiteRef, ContentModel.PROP_AVMSTORE);
// find the list of users who have a sandbox in the website
List<String> users = (List<String>)nodeService.getProperty(websiteRef, ContentModel.PROP_USERSANDBOXES);
for (int i=0; i<users.size(); i++)
// get the list of users who have a sandbox in the website
int index = 0;
List<ChildAssociationRef> userInfoRefs = nodeService.getChildAssocs(
websiteRef, ContentModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : userInfoRefs)
{
String username = users.get(i);
NodeRef userInfoRef = ref.getChildRef();
String username = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERNAME);
String userrole = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERROLE);
// build the name of the main store for the user
// build the name of the main store for this user
String mainStore = AVMConstants.buildAVMUserMainStoreName(storeRoot, username);
// check it exists before we render the view
@@ -227,8 +233,10 @@ public class UIUserSandboxes extends SelfRenderingComponent
out.write("<b>");
out.write(bundle.getString(MSG_USERNAME));
out.write(":</b>&nbsp;");
out.write(username); // TODO: convert to full name?
out.write("</td><td><nobr>");
out.write(username);
out.write(" (");
out.write(bundle.getString(userrole));
out.write(")</td><td><nobr>");
// direct actions for a sandbox
String sandboxUrl = AVMConstants.buildAVMStoreUrl(mainStore);
@@ -279,7 +287,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
"white");
// spacer row
if (i < users.size() - 1)
if (index++ < userInfoRefs.size() - 1)
{
out.write("<div style='padding:4px'></div>");
}