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/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to