Author: ludovic
Date: 2008-01-13 22:43:25 +0100 (Sun, 13 Jan 2008)
New Revision: 6805
Modified:
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/api/SpaceManager.java
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/impl/SpaceManagerImpl.java
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/plugin/SpaceManagerPluginApi.java
Log:
CURRIKI-1345 Rights in groups implementation
Modified:
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/api/SpaceManager.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/api/SpaceManager.java
2008-01-13 19:54:15 UTC (rev 6804)
+++
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/api/SpaceManager.java
2008-01-13 21:43:25 UTC (rev 6805)
@@ -410,4 +410,40 @@
* @return
*/
public boolean joinSpace(String spaceName, XWikiContext context) throws
SpaceManagerException;
+
+ /**
+ * Set the rights in the space
+ * @param space
+ * @param context
+ * @throws SpaceManagerException
+ */
+ public void setSpaceRights(Space space, XWikiContext context) throws
SpaceManagerException;
+
+ /**
+ * Set the rights in the space
+ * @param space
+ * @param oldPolicy previous policy
+ * @param newPolicy new policy
+ * @param context
+ * @throws SpaceManagerException
+ */
+ public void updateSpaceRights(Space space, String oldPolicy, String
newPolicy, XWikiContext context) throws SpaceManagerException;
+
+ /**
+ * Set the rights in the sub-space
+ * @param space
+ * @param subSpace
+ * @param context
+ * @throws SpaceManagerException
+ */
+ public void setSubSpaceRights(Space space, String subSpace, XWikiContext
context) throws SpaceManagerException;
+
+ /**
+ * Get the list of sub-spaces to protect
+ * @param context
+ * @return
+ * @throws SpaceManagerException
+ */
+ public String[] getProtectedSubSpaces(XWikiContext context) throws
SpaceManagerException;
+
}
Modified:
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/impl/SpaceManagerImpl.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/impl/SpaceManagerImpl.java
2008-01-13 19:54:15 UTC (rev 6804)
+++
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/impl/SpaceManagerImpl.java
2008-01-13 21:43:25 UTC (rev 6805)
@@ -33,7 +33,6 @@
import com.xpn.xwiki.plugin.mailsender.MailSenderPlugin;
import com.xpn.xwiki.render.XWikiVelocityRenderer;
-import org.apache.commons.lang.StringUtils;
import org.apache.velocity.VelocityContext;
import org.xwiki.plugin.spacemanager.api.*;
import org.xwiki.plugin.spacemanager.plugin.SpaceManagerPluginApi;
@@ -47,6 +46,8 @@
public class SpaceManagerImpl extends XWikiDefaultPlugin implements
SpaceManager {
public final static String SPACEMANAGER_EXTENSION_CFG_PROP =
"xwiki.spacemanager.extension";
+ public final static String SPACEMANAGER_PROTECTED_SUBSPACES_PROP =
"xwiki.spacemanager.protectedsubspaces";
+ public final static String SPACEMANAGER_DEFAULT_PROTECTED_SUBSPACES = "";
public final static String SPACEMANAGER_DEFAULT_EXTENSION =
"org.xwiki.plugin.spacemanager.impl.SpaceManagerExtensionImpl";
public final static String SPACEMANAGER_DEFAULT_MAIL_NOTIFICATION = "1";
@@ -248,14 +249,29 @@
return spaceName + ".WebPreferences";
}
+
/**
+ * Get the list of sub spaces to protect
+ * @param context
+ * @return
+ */
+ public String[] getProtectedSubSpaces(XWikiContext context) {
+ String protectedSubSpaces =
context.getWiki().Param(SPACEMANAGER_PROTECTED_SUBSPACES_PROP,
SPACEMANAGER_DEFAULT_PROTECTED_SUBSPACES);
+ if ((protectedSubSpaces!=null)&&(!protectedSubSpaces.equals(""))) {
+ return protectedSubSpaces.split(",");
+ } else {
+ return new String[0];
+ }
+ }
+
+ /**
* Gives a group certain rights over a space
* @param spaceName Name of the space
* @param groupName Name of the group that will have the value
* @param level Access level
* @param allow True if the right is allow, deny if not
*/
- protected boolean giveRightToGroup( String spaceName, String groupName,
String level, boolean allow, boolean global, XWikiContext context) throws
XWikiException {
+ protected boolean addRightToGroup( String spaceName, String groupName,
String level, boolean allow, boolean global, XWikiContext context) throws
XWikiException {
final String rightsClass = global ? "XWiki.XWikiGlobalRights" :
"XWiki.XWikiRights";
final String prefDocName = spaceName+".WebPreferences";
final String groupsField = "groups";
@@ -341,13 +357,108 @@
}
}
- protected void setGroupRights(Space newspace, XWikiContext context) throws
XWikiException {
+ /**
+ * Gives a group certain rights over a space
+ * @param spaceName Name of the space
+ * @param groupName Name of the group that will have the value
+ * @param level Access level
+ * @param allow True if the right is allow, deny if not
+ */
+ protected boolean removeRightFromGroup( String spaceName, String
groupName, String level, boolean allow, boolean global, XWikiContext context)
throws XWikiException {
+ final String rightsClass = global ? "XWiki.XWikiGlobalRights" :
"XWiki.XWikiRights";
+ final String prefDocName = spaceName+".WebPreferences";
+ final String groupsField = "groups";
+ final String levelsField = "levels";
+ final String allowField = "allow";
+
+ XWikiDocument prefDoc;
+ prefDoc = context.getWiki().getDocument(prefDocName,context);
+
+ boolean foundlevel = false;
+ int allowInt;
+ if (allow)
+ allowInt = 1;
+ else
+ allowInt = 0;
+ List objs = prefDoc.getObjects(rightsClass);
+ if (objs!=null) {
+ for(int i=0; i<objs.size(); i++){
+ BaseObject bobj = (BaseObject) objs.get(i);
+ if(bobj==null)
+ continue;
+ String groups = bobj.getStringValue(groupsField);
+ String levels = bobj.getStringValue(levelsField);
+ int allowDeny = bobj.getIntValue(allowField);
+ boolean allowdeny = (bobj.getIntValue(allowField) == 1);
+ String[] levelsarray = levels.split( " ,|" );
+ String[] groupsarray = groups.split( " ,|" );
+ if( ArrayUtils.contains(groupsarray,groupName) ) {
+ if(!foundlevel)
+ if( ArrayUtils.contains(levelsarray,level) ){
+ foundlevel = true;
+ if(allowInt == allowDeny){
+ prefDoc.removeObject(bobj);
+ context.getWiki().saveDocument(prefDoc, context);
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public void setSpaceRights(Space newspace, XWikiContext context) throws
SpaceManagerException {
// Set admin edit rights on group prefs
- giveRightToGroup( newspace.getSpaceName(), getAdminGroupName(
newspace.getSpaceName() ), "edit", true, false, context );
- // Set admin admin rights on group prefs
- giveRightToGroup( newspace.getSpaceName(), getAdminGroupName(
newspace.getSpaceName() ), "admin", true, true, context );
+ try {
+ addRightToGroup( newspace.getSpaceName(), getAdminGroupName(
newspace.getSpaceName() ), "edit", true, false, context );
+ // Set admin admin rights on group prefs
+ addRightToGroup( newspace.getSpaceName(), getAdminGroupName(
newspace.getSpaceName() ), "admin", true, true, context );
+ } catch (XWikiException e) {
+ throw new SpaceManagerException(e);
+ }
+
+ String[] subSpaces = getProtectedSubSpaces(context);
+ for (int i=0;i<subSpaces.length;i++) {
+ setSubSpaceRights(newspace, subSpaces[i], context);
+ }
}
+ public void updateSpaceRights(Space space, String oldPolicy, String
newPolicy, XWikiContext context) throws SpaceManagerException {
+ try {
+ if (oldPolicy.equals(newPolicy))
+ return;
+
+ String[] subSpaces = getProtectedSubSpaces(context);
+ for (int i=0;i<subSpaces.length;i++) {
+ if (newPolicy.equals("closed")) {
+ addRightToGroup( subSpaces[i] + "_" +
space.getSpaceName(), getMemberGroupName(space.getSpaceName() ), "view", true,
false, context );
+ } else if (newPolicy.equals("open")) {
+ removeRightFromGroup( subSpaces[i] + "_" +
space.getSpaceName(), getMemberGroupName(space.getSpaceName() ), "view", true,
false, context );
+ }
+ }
+ } catch (XWikiException e) {
+ throw new SpaceManagerException(e);
+ }
+ }
+
+ public void setSubSpaceRights(Space space, String subSpace, XWikiContext
context) throws SpaceManagerException {
+ try {
+ if ((subSpace!=null)&&(!subSpace.equals(""))) {
+ // Set admin edit rights on Messages group prefs
+ addRightToGroup( subSpace + "_" + space.getSpaceName(),
getMemberGroupName(space.getSpaceName() ), "edit", true, false, context );
+ // Set admin admin rights on Messages group prefs
+ addRightToGroup( subSpace + "_" + space.getSpaceName(),
getAdminGroupName( space.getSpaceName() ), "admin", true, true, context );
+
+ if ("closed".equals(space.getPolicy())) {
+ addRightToGroup( subSpace + "_" + space.getSpaceName(),
getMemberGroupName(space.getSpaceName() ), "view", true, false, context );
+ }
+ }
+ } catch (XWikiException e) {
+ throw new SpaceManagerException(e);
+ }
+ }
+
/**
* Creates a new space from scratch
* @param spaceTitle The name(display title) of the new space
@@ -366,7 +477,7 @@
// we need to add the creator as a member and as an admin
addAdmin(newspace.getSpaceName(), context.getUser(), context);
addMember(newspace.getSpaceName(), context.getUser(), context);
- setGroupRights(newspace, context);
+ setSpaceRights(newspace, context);
} catch (XWikiException e) {
throw new SpaceManagerException(e);
}
@@ -408,7 +519,7 @@
// we need to add the creator as a member and as an admin
addAdmin(newspace.getSpaceName(), context.getUser(), context);
addMember(newspace.getSpaceName(), context.getUser(), context);
- setGroupRights(newspace, context);
+ setSpaceRights(newspace, context);
} catch (XWikiException e) {
throw new SpaceManagerException(e);
}
@@ -467,7 +578,7 @@
// we need to add the creator as a member and as an admin
addAdmin(newspace.getSpaceName(), context.getUser(), context);
addMember(newspace.getSpaceName(), context.getUser(), context);
- setGroupRights(newspace, context);
+ setSpaceRights(newspace, context);
} catch (XWikiException e) {
throw new SpaceManagerException(e);
}
Modified:
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/plugin/SpaceManagerPluginApi.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/plugin/SpaceManagerPluginApi.java
2008-01-13 19:54:15 UTC (rev 6804)
+++
xwiki-products/curriki/trunk/plugins/spacemanager/src/main/java/org/xwiki/plugin/spacemanager/plugin/SpaceManagerPluginApi.java
2008-01-13 21:43:25 UTC (rev 6805)
@@ -459,4 +459,24 @@
{
return getSpaceManager().isAdmin(spaceName, userName, context);
}
+
+ public void updateSpaceRights(SpaceApi space, String oldPolicy, String
newPolicy) throws SpaceManagerException {
+ if (hasProgrammingRights()) {
+ getSpaceManager().updateSpaceRights(space.getSpace(), oldPolicy,
newPolicy, context);
+ }
+ }
+
+ public void setSpaceRights(SpaceApi space) throws SpaceManagerException {
+ if (hasProgrammingRights()) {
+ getSpaceManager().setSpaceRights(space.getSpace(), context);
+ }
+ }
+
+ public void setSubSpaceRights(SpaceApi space, String subSpace) throws
SpaceManagerException {
+ if (hasProgrammingRights()) {
+ getSpaceManager().setSubSpaceRights(space.getSpace(), subSpace,
context);
+ }
+ }
+
}
+
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications