diff --git a/apps/files_sharing/lib/Capabilities.php b/apps/files_sharing/lib/Capabilities.php index 06aa1271c8f8d..d1b75cd0a99d4 100644 --- a/apps/files_sharing/lib/Capabilities.php +++ b/apps/files_sharing/lib/Capabilities.php @@ -106,7 +106,7 @@ public function getCapabilities() { $res['api_enabled'] = true; $public = []; - $public['enabled'] = $this->shareManager->shareApiAllowLinks(); + $public['enabled'] = $this->shareManager->canUserCreateLinkShares(); if ($public['enabled']) { $public['password'] = []; $public['password']['enforced'] = $this->shareManager->shareApiLinkEnforcePassword(); diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 4abc3a3f54cad..15a14af5c9f83 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -559,7 +559,7 @@ protected function groupCreateChecks(IShare $share) { */ protected function linkCreateChecks(IShare $share) { // Are link shares allowed? - if (!$this->shareApiAllowLinks()) { + if (!$this->canUserCreateLinkShares()) { throw new \Exception($this->l->t('Link sharing is not allowed')); } @@ -1413,7 +1413,7 @@ public function getShareByToken($token) { } $share = null; try { - if ($this->shareApiAllowLinks()) { + if ($this->isLinkSharingEnabled()) { $provider = $this->factory->getProviderForType(IShare::TYPE_LINK); $share = $provider->getShareByToken($token); } @@ -1740,27 +1740,57 @@ public function shareApiEnabled() { } /** - * Is public link sharing enabled + * Check if public link sharing is enabled globally * * @return bool + * @since 33.0.0 */ - public function shareApiAllowLinks() { - if ($this->config->getAppValue('core', 'shareapi_allow_links', 'yes') !== 'yes') { + public function isLinkSharingEnabled(): bool { + return $this->config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes'; + } + + /** + * Check if a specific user can create public link shares + * + * This considers both global settings and user-specific group restrictions + * + * @param string|null $userId The user ID to check, or null for current user + * @return bool + * @since 33.0.0 + */ + public function canUserCreateLinkShares(?string $userId = null): bool { + if (!$this->isLinkSharingEnabled()) { return false; } - $user = $this->userSession->getUser(); - if ($user) { - $excludedGroups = json_decode($this->config->getAppValue('core', 'shareapi_allow_links_exclude_groups', '[]')); - if ($excludedGroups) { - $userGroups = $this->groupManager->getUserGroupIds($user); - return !(bool)array_intersect($excludedGroups, $userGroups); - } + $user = $userId ? $this->userManager->get($userId) : $this->userSession->getUser(); + if (!$user) { + return true; + } + + $excludedGroups = json_decode($this->config->getAppValue('core', 'shareapi_allow_links_exclude_groups', '[]')); + if ($excludedGroups) { + $userGroups = $this->groupManager->getUserGroupIds($user); + return !(bool)array_intersect($excludedGroups, $userGroups); } return true; } + /** + * Is public link sharing enabled + * + * @param bool $checkGroupExclusion Whether to check the current user's group exclusions + * @return bool + * @deprecated 33.0.0 Use isLinkSharingEnabled() or canUserCreateLinkShares() instead + */ + public function shareApiAllowLinks(bool $checkGroupExclusion = true) { + if ($checkGroupExclusion) { + return $this->canUserCreateLinkShares(); + } + return $this->isLinkSharingEnabled(); + } + /** * Is password on public link requires * diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php index f65f7a4c56bfd..b1d703cd39956 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -295,11 +295,31 @@ public function newShare(); */ public function shareApiEnabled(); + /** + * Check if public link sharing is enabled globally + * + * @return bool + * @since 33.0.0 + */ + public function isLinkSharingEnabled(): bool; + + /** + * Check if a specific user can create public link shares + * + * This considers both global settings and user-specific group restrictions + * + * @param string|null $userId The user ID to check, or null for current user + * @return bool + * @since 33.0.0 + */ + public function canUserCreateLinkShares(?string $userId = null): bool; + /** * Is public link sharing enabled * * @return bool * @since 9.0.0 + * @deprecated 33.0.0 Use isLinkSharingEnabled() or canUserCreateLinkShares() instead */ public function shareApiAllowLinks();