sharing: share-by-group: add share resolution for other methods beside propfind

This commit is contained in:
Peter Bieringer
2026-07-19 11:04:46 +02:00
parent 5e4dd2451a
commit 1ff4c6ca03
7 changed files with 38 additions and 13 deletions

View File

@@ -23,7 +23,7 @@ from http import client
from typing import Optional, Union
from urllib.parse import quote
from radicale import httputils, storage, types, xmlutils
from radicale import httputils, sharing, storage, types, xmlutils
from radicale.app.base import Access, ApplicationBase
from radicale.hook import HookNotificationItem, HookNotificationItemTypes
from radicale.log import logger
@@ -71,6 +71,10 @@ class ApplicationPartDelete(ApplicationBase):
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']

View File

@@ -23,7 +23,7 @@ from http import client
from typing import Union
from urllib.parse import quote
from radicale import httputils, pathutils, storage, types, xmlutils
from radicale import httputils, pathutils, sharing, storage, types, xmlutils
from radicale.app.base import Access, ApplicationBase
from radicale.log import logger
@@ -89,7 +89,10 @@ class ApplicationPartGet(ApplicationBase):
share = None
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']

View File

@@ -24,7 +24,7 @@ import re
from http import client
from urllib.parse import unquote, urlparse
from radicale import httputils, pathutils, storage, types
from radicale import httputils, pathutils, sharing, storage, types
from radicale.app import base as app_base
from radicale.app.base import Access, ApplicationBase
from radicale.log import logger
@@ -73,7 +73,10 @@ class ApplicationPartMove(ApplicationBase):
permissions_filter = None
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']
@@ -93,7 +96,10 @@ class ApplicationPartMove(ApplicationBase):
to_path = to_path[len(base_prefix):]
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(to_path, to_user)
to_user_lookup = to_user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
to_user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(to_path, to_user_lookup)
if share:
# overwrite and run through extended permission check
to_path = share['PathMapped']

View File

@@ -588,7 +588,10 @@ class ApplicationPartPropfind(ApplicationBase):
allowed_items: list = []
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']

View File

@@ -107,7 +107,10 @@ class ApplicationPartProppatch(ApplicationBase):
path_orig = path
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']

View File

@@ -33,8 +33,8 @@ from typing import Iterator, List, Mapping, MutableMapping, Optional, Tuple
import vobject
import radicale.item as radicale_item
from radicale import (httputils, pathutils, rights, storage, types, utils,
xmlutils)
from radicale import (httputils, pathutils, rights, sharing, storage, types,
utils, xmlutils)
from radicale.app.base import Access, ApplicationBase
from radicale.hook import HookNotificationItem, HookNotificationItemTypes
from radicale.log import logger
@@ -188,7 +188,10 @@ class ApplicationPartPut(ApplicationBase):
permissions_filter = None
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']

View File

@@ -38,7 +38,7 @@ import vobject.base
from vobject.base import ContentLine
import radicale.item as radicale_item
from radicale import httputils, pathutils, storage, types, xmlutils
from radicale import httputils, pathutils, sharing, storage, types, xmlutils
from radicale.app.base import Access, ApplicationBase
from radicale.item import filter as radicale_filter
from radicale.log import logger
@@ -864,7 +864,10 @@ class ApplicationPartReport(ApplicationBase):
share = None
if self._sharing._enabled:
# Sharing by token or map (if enabled)
share = self._sharing.sharing_collection_resolver(path, user)
user_lookup = user
if self._rights._user_groups is not None and len(self._rights._user_groups) > 0:
user_lookup += sharing.SHARING_SEPARATOR_GROUP + ','.join(self._rights._user_groups)
share = self._sharing.sharing_collection_resolver(path, user_lookup)
if share:
# overwrite and run through extended permission check
path = share['PathMapped']