diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php index 99ed8cb3d4a..0f2a12f7f75 100644 --- a/apps/dav/lib/CalDAV/Calendar.php +++ b/apps/dav/lib/CalDAV/Calendar.php @@ -177,18 +177,38 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable 'principal' => parent::getOwner(), 'protected' => true, ]; + $acl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => parent::getOwner() . '/calendar-proxy-read', + 'protected' => true, + ]; + $acl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => parent::getOwner() . '/calendar-proxy-write', + 'protected' => true, + ]; if ($this->canWrite()) { $acl[] = [ 'privilege' => '{DAV:}write', 'principal' => parent::getOwner(), 'protected' => true, ]; + $acl[] = [ + 'privilege' => '{DAV:}write', + 'principal' => parent::getOwner() . '/calendar-proxy-write', + 'protected' => true, + ]; } else { $acl[] = [ 'privilege' => '{DAV:}write-properties', 'principal' => parent::getOwner(), 'protected' => true, ]; + $acl[] = [ + 'privilege' => '{DAV:}write-properties', + 'principal' => parent::getOwner() . '/calendar-proxy-write', + 'protected' => true, + ]; } } if ($this->isPublic()) { @@ -205,6 +225,8 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable $this->getOwner() . '/calendar-proxy-read', $this->getOwner() . '/calendar-proxy-write', parent::getOwner(), + parent::getOwner() . '/calendar-proxy-read', + parent::getOwner() . '/calendar-proxy-write', 'principals/system/public', ]; /** @var list $acl */ diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php index 5f5552dd0f0..fedc339d910 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php @@ -236,18 +236,38 @@ class CalendarTest extends TestCase { 'principal' => 'user2', 'protected' => true ]; + $expectedAcl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => 'user2/calendar-proxy-read', + 'protected' => true + ]; + $expectedAcl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => 'user2/calendar-proxy-write', + 'protected' => true + ]; if ($expectsWrite) { $expectedAcl[] = [ 'privilege' => '{DAV:}write', 'principal' => 'user2', 'protected' => true ]; + $expectedAcl[] = [ + 'privilege' => '{DAV:}write', + 'principal' => 'user2/calendar-proxy-write', + 'protected' => true + ]; } else { $expectedAcl[] = [ 'privilege' => '{DAV:}write-properties', 'principal' => 'user2', 'protected' => true ]; + $expectedAcl[] = [ + 'privilege' => '{DAV:}write-properties', + 'principal' => 'user2/calendar-proxy-write', + 'protected' => true + ]; } } $this->assertEquals($expectedAcl, $acl);