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/