diff --git a/apps/dav/lib/connector/sabre/node.php b/apps/dav/lib/connector/sabre/node.php index 4828cb611edcb234de2271bd4398523dd4c48eed..9867fe66cd30c2527c961d75216684be58de9ff5 100644 --- a/apps/dav/lib/connector/sabre/node.php +++ b/apps/dav/lib/connector/sabre/node.php @@ -30,6 +30,7 @@ namespace OCA\DAV\Connector\Sabre; +use OC\Files\Mount\MoveableMount; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; @@ -234,7 +235,14 @@ abstract class Node implements \Sabre\DAV\INode { */ $mountpoint = $this->info->getMountPoint(); if (!($mountpoint instanceof MoveableMount)) { - $permissions |= \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_UPDATE; + $mountpointpath = $mountpoint->getMountPoint(); + if (substr($mountpointpath, -1) === '/') { + $mountpointpath = substr($mountpointpath, 0, -1); + } + + if ($mountpointpath === $this->info->getPath()) { + $permissions |= \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_UPDATE; + } } /* diff --git a/apps/dav/tests/unit/connector/sabre/node.php b/apps/dav/tests/unit/connector/sabre/node.php index c9fe6e6027386906d4f353c74d6892f654be282f..cde8e746dc327c5ff7fdb20ee78d9b09c6beaf38 100644 --- a/apps/dav/tests/unit/connector/sabre/node.php +++ b/apps/dav/tests/unit/connector/sabre/node.php @@ -108,16 +108,19 @@ class Node extends \Test\TestCase { */ public function testSharePermissions($type, $permissions, $expected) { $storage = $this->getMock('\OCP\Files\Storage'); - $storage->method('getPermissions')->willReturn($permissions); + $mountpoint = $this->getMock('\OCP\Files\Mount\IMountPoint'); + $mountpoint->method('getMountPoint')->willReturn('myPath'); + $info = $this->getMockBuilder('\OC\Files\FileInfo') ->disableOriginalConstructor() - ->setMethods(array('getStorage', 'getType')) + ->setMethods(['getStorage', 'getType', 'getMountPoint']) ->getMock(); $info->method('getStorage')->willReturn($storage); $info->method('getType')->willReturn($type); + $info->method('getMountPoint')->willReturn($mountpoint); $view = $this->getMock('\OC\Files\View');