From d0c614a322566003205d3599a4215836da19dde5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 26 May 2017 12:36:42 +0200 Subject: [PATCH 1/2] Allow dir-listing also when one child is blocked by access control Signed-off-by: Joas Schilling --- apps/dav/lib/Connector/Sabre/FilesPlugin.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 30eeaaacf63..efc9a42e5f5 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -288,10 +288,16 @@ class FilesPlugin extends ServerPlugin { $httpRequest = $this->server->httpRequest; if ($node instanceof \OCA\DAV\Connector\Sabre\Node) { + /** + * This was disabled, because it made dir listing throw an exception, + * so users were unable to navigate into folders where one subitem + * is blocked by the files_accesscontrol app, see: + * https://github.com/nextcloud/files_accesscontrol/issues/65 if (!$node->getFileInfo()->isReadable()) { // avoid detecting files through this means throw new NotFound(); } + */ $propFind->handle(self::FILEID_PROPERTYNAME, function() use ($node) { return $node->getFileId(); From b6d6f3c521ac119b56c045a2379bbe4c4f416d6c Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 7 Jun 2017 11:24:00 +0200 Subject: [PATCH 2/2] Fix unit test Signed-off-by: Joas Schilling --- apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php index 739c8f62540..885f3c23c24 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php @@ -341,11 +341,12 @@ class FilesPluginTest extends TestCase { $this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME)); } - /** - * @expectedException \Sabre\DAV\Exception\NotFound - */ public function testGetPropertiesWhenNoPermission() { - /** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit_Framework_MockObject_MockObject $node */ + // No read permissions can be caused by files access control. + // But we still want to load the directory list, so this is okay for us. + // $this->expectException(\Sabre\DAV\Exception\NotFound::class); + + /** @var \OCA\DAV\Connector\Sabre\Directory|\PHPUnit_Framework_MockObject_MockObject $node */ $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory') ->disableOriginalConstructor() ->getMock();