asiri (SVN) wrote:
Author: asiri
Date: 2008-12-15 17:45:22 +0100 (Mon, 15 Dec 2008)
New Revision: 14754
Modified:
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/domain/DavPage.java
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/views/pages/PagesBySpaceNameSubView.java
Log:
XWIKI-2982: Not possible to rename pages / spaces via the WebDAV interface
Fixed.
Modified:
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/domain/DavPage.java
===================================================================
---
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/domain/DavPage.java 2008-12-15
16:44:07 UTC (rev 14753)
+++
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/domain/DavPage.java 2008-12-15
16:45:22 UTC (rev 14754)
@@ -284,7 +284,9 @@
*/
public void move(DavResource destination) throws DavException
{
- getContext().checkAccess("delete", this.name);
+ // Renaming a page requires edit rights on the current document, delete rights
on the
+ // target document (if it exists) and edit rights on all the children of current
document.
+ getContext().checkAccess("edit", this.name);
XWikiDavResource dResource = (XWikiDavResource) destination;
String dSpaceName = null;
String dPageName = null;
@@ -302,8 +304,10 @@
String sql = "where doc.parent='" + this.name +
"'";
List<String> childDocNames = getContext().searchDocumentsNames(sql);
// Validate access rights for the destination page.
- getContext().checkAccess("edit", newDocName);
- // Validate access rights for all the renamed pages.
+ if (getContext().exists(newDocName)) {
+ getContext().checkAccess("delete", newDocName);
+ }
You still have to check for edit right:
} else {
getContext().checkAccess("edit", newDocName);
}
+ // Validate access rights for all the
child pages.
for (String childDocName : childDocNames) {
getContext().checkAccess("edit", childDocName);
}
Modified:
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/views/pages/PagesBySpaceNameSubView.java
===================================================================
---
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/views/pages/PagesBySpaceNameSubView.java 2008-12-15
16:44:07 UTC (rev 14753)
+++
platform/core/trunk/xwiki-webdav/src/main/java/com/xpn/xwiki/plugin/webdav/resources/views/pages/PagesBySpaceNameSubView.java 2008-12-15
16:45:22 UTC (rev 14754)
@@ -168,11 +168,10 @@
removeTempResource((DavTempFile) member);
} else if (member instanceof DavPage) {
String pName = ((DavPage) member).getDisplayName();
- if (getContext().hasAccess("delete", pName)) {
- XWikiDocument childDoc = getContext().getDocument(pName);
- if (!childDoc.isNew()) {
- getContext().deleteDocument(childDoc);
- }
+ getContext().checkAccess("delete", pName);
+ XWikiDocument childDoc = getContext().getDocument(pName);
+ if (!childDoc.isNew()) {
+ getContext().deleteDocument(childDoc);
}
} else {
throw new DavException(DavServletResponse.SC_BAD_REQUEST);
@@ -192,13 +191,15 @@
if (getCollection().equals(dSpace.getCollection())) {
String sql = "where doc.web='" + this.name +
"'";
List<String> docNames =
getContext().searchDocumentsNames(sql);
- // To rename an entire space, user should have delete rights on all
the
- // documents in the current space and edit rights on all the
documents that
- // will be created after the rename operation.
+ // To rename an entire space, user should have edit rights on all
the
+ // documents in the current space and delete rights on all the
documents that
+ // will be replaced (if they exist).
for (String docName : docNames) {
String newDocName = dSpace.getDisplayName() + "." +
docName;
- getContext().checkAccess("delete", docName);
- getContext().checkAccess("edit", newDocName);
+ getContext().checkAccess("edit", docName);
+ if (getContext().exists(newDocName)) {
+ getContext().checkAccess("delete", newDocName);
+ }
This looks like duplication. Can you move this check in a common method?
}
for (String docName : docNames) {
XWikiDocument doc = getContext().getDocument(docName);
--
Sergiu Dumitriu
http://purl.org/net/sergiu/