From 38e7ca001b1d316ae1e22a6b31af2347cb9e07c7 Mon Sep 17 00:00:00 2001 From: Ghassen kefi Date: Tue, 1 Sep 2026 20:34:33 +0200 Subject: [PATCH] fix: filter system tag object IDs by user visibility Signed-off-by: Ghassen kefi --- apps/dav/lib/SystemTag/SystemTagPlugin.php | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/apps/dav/lib/SystemTag/SystemTagPlugin.php b/apps/dav/lib/SystemTag/SystemTagPlugin.php index 90f377af844b6..e301d25dc6f0e 100644 --- a/apps/dav/lib/SystemTag/SystemTagPlugin.php +++ b/apps/dav/lib/SystemTag/SystemTagPlugin.php @@ -275,6 +275,37 @@ public function handleGetProperties( $propFind->handle(self::FILEID_PROPERTYNAME, function () use ($node): int { return $node->getReferenceFileId(); }); + + $propFind->handle(self::OBJECTIDS_PROPERTYNAME, function () use ($node): SystemTagsObjectList { + $objectTypes = $this->tagMapper->getAvailableObjectTypes(); + $objects = []; + foreach ($objectTypes as $type) { + $systemTagObjectType = new SystemTagObjectType($node->getSystemTag(), $type, $this->tagManager, $this->tagMapper); + $objects = array_merge($objects, array_fill_keys($systemTagObjectType->getObjectsIds(), $type)); + } + return new SystemTagsObjectList($objects); + }); + } + + if ($node instanceof SystemTagObjectType) { + $propFind->handle(self::OBJECTIDS_PROPERTYNAME, function () use ($node): SystemTagsObjectList { + $user = $this->userSession->getUser(); + if ($user === null) { + return new SystemTagsObjectList([]); + } + + $allIds = $node->getObjectsIds(); + $userFolder = $this->rootFolder->getUserFolder($user->getUID()); + $filteredIds = []; + foreach ($allIds as $id) { + if ($userFolder->getFirstNodeById((int)$id) !== null) { + $filteredIds[] = $id; + } + } + return new SystemTagsObjectList( + array_fill_keys($filteredIds, $node->getName()) + ); + }); } }