diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php index a216e4e078..9c56398b14 100644 --- a/apps/dav/lib/CalDAV/Calendar.php +++ b/apps/dav/lib/CalDAV/Calendar.php @@ -145,11 +145,16 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { ]; } - if ($this->isShared()) { + $acl = $this->caldavBackend->applyShareAcl($this->getResourceId(), $acl); + + if (!$this->isShared()) { return $acl; } - return $this->caldavBackend->applyShareAcl($this->getResourceId(), $acl); + $allowedPrincipals = [$this->getOwner(), parent::getOwner(), 'principals/system/public']; + return array_filter($acl, function($rule) use ($allowedPrincipals) { + return in_array($rule['principal'], $allowedPrincipals); + }); } public function getChildACL() { diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php index 4ede886d31..cf295f0106 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php @@ -246,6 +246,7 @@ class CalendarTest extends TestCase { ]); $backend->expects($this->any())->method('getCalendarObject') ->willReturn($calObject2)->with(666, 'event-2'); + $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); $calendarInfo = [ 'principaluri' => 'user2', @@ -333,6 +334,7 @@ EOD; ]); $backend->expects($this->any())->method('getCalendarObject') ->willReturn($calObject1)->with(666, 'event-1'); + $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => $isShared ? 'user1' : 'user2', diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php index 6b2bf58d39..03cbf71d6c 100644 --- a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php @@ -51,6 +51,7 @@ class PublicCalendarTest extends CalendarTest { ]); $backend->expects($this->any())->method('getCalendarObject') ->willReturn($calObject2)->with(666, 'event-2'); + $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user2', @@ -135,6 +136,7 @@ EOD; ]); $backend->expects($this->any())->method('getCalendarObject') ->willReturn($calObject1)->with(666, 'event-1'); + $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1',