I just recognized that the bold marking does not work when using block quotes (just search for ** in order to get the most important spots)
I’m using the xwiki confluence migration tool and didn’t succeed in importing groups and users which have confluence space permissions, so I “hard coded” this functionality - also I wasn’t sure if I could create permissions without the existing users - nevertheless in the end it seemed to work they way I did it - for my purpose…
I recognized that I didn’t post the confluence space permission-part (only the page restriction) - anyhow you could read it out of the attachments I’ve posted before - here the main parts
/**
* users & groups have to be created in order to assign them permissions
*
* @param spaceId confluence space id
* @param spaceKey confluence space key
* @param spacePermissions confluence space permissions
* @param proxyFilter confluence filter
* @throws FilterException filter error
*/
private void createSpacePermissionsImportScript(long spaceId, String spaceKey, Collection<Long> spacePermissions, ConfluenceFilter proxyFilter) throws FilterException {
// in order to use few objects, collect oll permissions on user, group base
Map<String, List<String>> userPermissions = new HashMap<>();
Map<String, List<String>> groupPermissions = new HashMap<>();
for (Long spacePermissionId : spacePermissions) {
ConfluenceProperties spacePermissionProperties;
try {
spacePermissionProperties = this.confluencePackage.getSpacePermissionProperties(spaceId, spacePermissionId);
} catch (ConfigurationException e) {
throw new FilterException("Failed to get spacepermission properties", e);
}
final String group = spacePermissionProperties.getString("group");
final String permission = spacePermissionProperties.getString("type");
final String xWikiPermission = convertConfluenceSpacepermission2xWikiPermission(permission);
final String user = spacePermissionProperties.getString("userSubject");
if (StringUtils.isEmpty(xWikiPermission))
continue;
if (StringUtils.isNoneEmpty(group)){
addPermissionIfNotExists(groupPermissions, group, xWikiPermission);
}
else if (StringUtils.isNoneEmpty(user)) {
final ConfluenceProperties userImplProperties;
// look up ConfluenceUserImpl in order to get username aso
try {
userImplProperties = this.confluencePackage.getUserImplProperties(user);
}
catch (ConfigurationException e) {
throw new FilterException("Failed to get UserImpl properties for user-key: "+ user, e);
}
String lowerName = userImplProperties.getString(ConfluenceXMLPackage.USERIMPL_LOWERNAME, "");
if (this.properties.isConvertToXWiki()) {
if (lowerName.equals("admin")) {
lowerName = "Admin";
}
}
addPermissionIfNotExists(userPermissions, lowerName, xWikiPermission);
}
}
String globalPermissionDocument = "WebPreferences"; //spaceKey + ".WebPreferences"; // eg. TESTARGESPACE02.WebPreferences
**writeSpacePermissions(proxyFilter, groupPermissions, globalPermissionDocument, false);**
** writeSpacePermissions(proxyFilter, userPermissions, globalPermissionDocument, true);**
/* {{/velocity}}
#set ($mydoc = $xwiki.getDocument("TESTARGESPACE02.WebPreferences"))
#set ($RightsObjectAdmins = $mydoc.newObject("XWiki.XWikiGlobalRights"))
## #set ($result = $RightsObjectAdmins.set("groups", "XWiki.zbg_bedienstete"))
#set ($result = $RightsObjectAdmins.set("levels", "view,comment,edit,delete"))
#set ($result = $RightsObjectAdmins.set("users", "XWiki.baerthlein,XWiki.loc_hettegger_ib"))
#set ($result = $RightsObjectAdmins.set("allow", 1))
$mydoc.save()
{{/velocity}}*/
/* StringBuilder body = new StringBuilder();
for (Map.Entry<String, List<String>> set : groupPermissions.entrySet()) {
// always create a new Object so the existing (rights) Objects don't get overwritten
body.append("#set ($RightsObjectAdmins = $mydoc.newObject(\"XWiki.XWikiGlobalRights\"))\n");
body.append("#set ($result = $RightsObjectAdmins.set(\"groups\", \"XWiki."+set.getKey()+"\"))\n");
String levels = String.join(",", set.getValue());
body.append("#set ($result = $RightsObjectAdmins.set(\"levels\", \""+levels+"\"))\n");
body.append("#set ($result = $RightsObjectAdmins.set(\"allow\", 1))\n");
body.append("$mydoc.save()\n");
}
for (Map.Entry<String, List<String>> set : userPermissions.entrySet()) {
// always create a new Object so the existing (rights) Objects don't get overwritten
body.append("#set ($RightsObjectAdmins = $mydoc.newObject(\"XWiki.XWikiGlobalRights\"))\n");
body.append("#set ($result = $RightsObjectAdmins.set(\"users\", \"XWiki."+set.getKey()+"\"))\n");
String levels = String.join(",", set.getValue());
body.append("#set ($result = $RightsObjectAdmins.set(\"levels\", \""+levels+"\"))\n");
body.append("#set ($result = $RightsObjectAdmins.set(\"allow\", 1))\n");
body.append("$mydoc.save()\n");
}
// todo: spaceKey == xWiki - Webhome / name ?
StringBuilder header = new StringBuilder("{{velocity}}\n");
header.append("#set ($mydoc = $xwiki.getDocument(\""+spaceKey+".WebPreferences\"))\n");
StringBuilder footer = new StringBuilder("{{/velocity}}\n");
String script = header.toString() + body.toString() + footer.toString();
String filename = this.environment.getTemporaryDirectory().toPath() + "/spacepermission-script-"+spaceKey+".vm";
FileOutputStream fileStream = null;
try {
fileStream = new FileOutputStream(filename);
fileStream.write(script.getBytes());
fileStream.flush();
fileStream.close();
this.logger.info("Created spacepermissions-script: " + filename);
} catch (FileNotFoundException e) {
logger.error("File not found error writing spacepermission-script: " + filename, e);
} catch (IOException e) {
logger.error("IO-error writing spacepermission-script: " + filename, e);
}*/
}
and the
private static void writeSpacePermissions(ConfluenceFilter proxyFilter, Map<String, List<String>> groupPermissions, String globalPermissionDocument, boolean isUserCollection) throws FilterException {
for (Map.Entry<String, List<String>> set : groupPermissions.entrySet()) {
// Permission object
FilterEventParameters objectProps = new FilterEventParameters();
objectProps.put(WikiObjectFilter.PARAMETER_CLASS_REFERENCE, XWiki.SYSTEM_SPACE + ".XWikiGlobalRights");
proxyFilter.beginWikiObject(globalPermissionDocument, objectProps);
// permissions object property
String levels = String.join(",", set.getValue());
proxyFilter.onWikiObjectProperty("levels", levels, new FilterEventParameters());
if (isUserCollection)
proxyFilter.onWikiObjectProperty("users", set.getKey(), new FilterEventParameters());
else
proxyFilter.onWikiObjectProperty("groups", set.getKey(), new FilterEventParameters());
proxyFilter.onWikiObjectProperty("allow", 1, new FilterEventParameters());
// persist wiki object
proxyFilter.endWikiObject(globalPermissionDocument, objectProps);
}
}
hope that makes it a little bit clearer?
regards, Stefan.