On Tue, Dec 16, 2008 at 8:16 AM, Sergiu Dumitriu <[email protected]> wrote:
> 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?
>
Fixed by introducing an intermediate access level named 'overwrite'. I hope
this is not breaking any laws. So it's something like:
if (right.equals("overwrite")) {
String overwriteAccess = exists(fullDocName) ? "delete" : "edit";
hasAccess = hasAccess(overwriteAccess, fullDocName);
} else
Thanks.
- Asiri
>
> > }
> > 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
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs