From ab0a5bdbe9a97951234ea98bc8640ecfcfffd97d Mon Sep 17 00:00:00 2001 From: Hamza Date: Thu, 21 May 2026 12:30:16 +0200 Subject: [PATCH] fix(caldav): grant sharee Acls to the delegate Signed-off-by: Hamza --- apps/dav/lib/CalDAV/Calendar.php | 22 +++++++++++++++++++++ apps/dav/tests/unit/CalDAV/CalendarTest.php | 20 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php index 99ed8cb3d4a6a..0f2a12f7f759e 100644 --- a/apps/dav/lib/CalDAV/Calendar.php +++ b/apps/dav/lib/CalDAV/Calendar.php @@ -177,18 +177,38 @@ public function getACL() { '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 @@ public function getACL() { $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 5f5552dd0f0df..fedc339d9108b 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php @@ -236,18 +236,38 @@ public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet, $uri = 'def '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);