Merge pull request #24415 from owncloud/optimize_sharingdisabled_for_user
Optimize isSharingDisabledForUser
This commit is contained in:
commit
9c328de4ab
|
@ -24,25 +24,24 @@
|
||||||
|
|
||||||
namespace OC\Share20;
|
namespace OC\Share20;
|
||||||
|
|
||||||
|
use OC\Cache\CappedMemoryCache;
|
||||||
use OC\Files\Mount\MoveableMount;
|
use OC\Files\Mount\MoveableMount;
|
||||||
use OCP\Files\IRootFolder;
|
|
||||||
use OCP\Files\NotFoundException;
|
|
||||||
use OCP\IUserManager;
|
|
||||||
use OCP\Share\IManager;
|
|
||||||
use OCP\Share\IProviderFactory;
|
|
||||||
use OC\Share20\Exception\BackendError;
|
|
||||||
use OCP\IConfig;
|
|
||||||
use OCP\IL10N;
|
|
||||||
use OCP\ILogger;
|
|
||||||
use OCP\Security\ISecureRandom;
|
|
||||||
use OCP\Security\IHasher;
|
|
||||||
use OCP\Files\Mount\IMountManager;
|
|
||||||
use OCP\IGroupManager;
|
|
||||||
use OCP\Files\File;
|
use OCP\Files\File;
|
||||||
use OCP\Files\Folder;
|
use OCP\Files\Folder;
|
||||||
|
use OCP\Files\IRootFolder;
|
||||||
use OCP\Share\Exceptions\ShareNotFound;
|
use OCP\Files\Mount\IMountManager;
|
||||||
|
use OCP\Files\NotFoundException;
|
||||||
|
use OCP\IConfig;
|
||||||
|
use OCP\IGroupManager;
|
||||||
|
use OCP\IL10N;
|
||||||
|
use OCP\ILogger;
|
||||||
|
use OCP\IUserManager;
|
||||||
|
use OCP\Security\IHasher;
|
||||||
|
use OCP\Security\ISecureRandom;
|
||||||
use OCP\Share\Exceptions\GenericShareException;
|
use OCP\Share\Exceptions\GenericShareException;
|
||||||
|
use OCP\Share\Exceptions\ShareNotFound;
|
||||||
|
use OCP\Share\IManager;
|
||||||
|
use OCP\Share\IProviderFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is the communication hub for all sharing related operations.
|
* This class is the communication hub for all sharing related operations.
|
||||||
|
@ -69,6 +68,9 @@ class Manager implements IManager {
|
||||||
private $userManager;
|
private $userManager;
|
||||||
/** @var IRootFolder */
|
/** @var IRootFolder */
|
||||||
private $rootFolder;
|
private $rootFolder;
|
||||||
|
/** @var CappedMemoryCache */
|
||||||
|
private $sharingDisabledForUsersCache;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manager constructor.
|
* Manager constructor.
|
||||||
|
@ -106,6 +108,7 @@ class Manager implements IManager {
|
||||||
$this->factory = $factory;
|
$this->factory = $factory;
|
||||||
$this->userManager = $userManager;
|
$this->userManager = $userManager;
|
||||||
$this->rootFolder = $rootFolder;
|
$this->rootFolder = $rootFolder;
|
||||||
|
$this->sharingDisabledForUsersCache = new CappedMemoryCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1209,6 +1212,14 @@ class Manager implements IManager {
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function sharingDisabledForUser($userId) {
|
public function sharingDisabledForUser($userId) {
|
||||||
|
if ($userId === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($this->sharingDisabledForUsersCache[$userId])) {
|
||||||
|
return $this->sharingDisabledForUsersCache[$userId];
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes') {
|
if ($this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes') {
|
||||||
$groupsList = $this->config->getAppValue('core', 'shareapi_exclude_groups_list', '');
|
$groupsList = $this->config->getAppValue('core', 'shareapi_exclude_groups_list', '');
|
||||||
$excludedGroups = json_decode($groupsList);
|
$excludedGroups = json_decode($groupsList);
|
||||||
|
@ -1224,10 +1235,13 @@ class Manager implements IManager {
|
||||||
// if the user is only in groups which are disabled for sharing then
|
// if the user is only in groups which are disabled for sharing then
|
||||||
// sharing is also disabled for the user
|
// sharing is also disabled for the user
|
||||||
if (empty($remainingGroups)) {
|
if (empty($remainingGroups)) {
|
||||||
|
$this->sharingDisabledForUsersCache[$userId] = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->sharingDisabledForUsersCache[$userId] = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,9 @@ class Util {
|
||||||
const ERROR=3;
|
const ERROR=3;
|
||||||
const FATAL=4;
|
const FATAL=4;
|
||||||
|
|
||||||
|
/** \OCP\Share\IManager */
|
||||||
|
private static $shareManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the current installed version of ownCloud
|
* get the current installed version of ownCloud
|
||||||
* @return array
|
* @return array
|
||||||
|
@ -171,13 +174,19 @@ class Util {
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
* @since 7.0.0
|
* @since 7.0.0
|
||||||
|
* @deprecated 9.1.0 Use \OC::$server->getShareManager()->sharingDisabledForUser
|
||||||
*/
|
*/
|
||||||
public static function isSharingDisabledForUser() {
|
public static function isSharingDisabledForUser() {
|
||||||
return \OC_Util::isSharingDisabledForUser(
|
if (self::$shareManager === null) {
|
||||||
\OC::$server->getConfig(),
|
self::$shareManager = \OC::$server->getShareManager();
|
||||||
\OC::$server->getGroupManager(),
|
}
|
||||||
\OC::$server->getUserSession()->getUser()
|
|
||||||
);
|
$user = \OC::$server->getUserSession()->getUser();
|
||||||
|
if ($user !== null) {
|
||||||
|
$user = $user->getUID();
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$shareManager->sharingDisabledForUser($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
namespace Test\Files;
|
namespace Test\Files;
|
||||||
|
|
||||||
|
use OC\Cache\CappedMemoryCache;
|
||||||
use OC\Files\Cache\Watcher;
|
use OC\Files\Cache\Watcher;
|
||||||
use OC\Files\Storage\Common;
|
use OC\Files\Storage\Common;
|
||||||
use OC\Files\Mount\MountPoint;
|
use OC\Files\Mount\MountPoint;
|
||||||
|
@ -269,6 +270,9 @@ class ViewTest extends \Test\TestCase {
|
||||||
* @dataProvider sharingDisabledPermissionProvider
|
* @dataProvider sharingDisabledPermissionProvider
|
||||||
*/
|
*/
|
||||||
public function testRemoveSharePermissionWhenSharingDisabledForUser($excludeGroups, $excludeGroupsList, $expectedShareable) {
|
public function testRemoveSharePermissionWhenSharingDisabledForUser($excludeGroups, $excludeGroupsList, $expectedShareable) {
|
||||||
|
// Reset sharing disabled for users cache
|
||||||
|
$this->invokePrivate(\OC::$server->getShareManager(), 'sharingDisabledForUsersCache', [new CappedMemoryCache()]);
|
||||||
|
|
||||||
$appConfig = \OC::$server->getAppConfig();
|
$appConfig = \OC::$server->getAppConfig();
|
||||||
$oldExcludeGroupsFlag = $appConfig->getValue('core', 'shareapi_exclude_groups', 'no');
|
$oldExcludeGroupsFlag = $appConfig->getValue('core', 'shareapi_exclude_groups', 'no');
|
||||||
$oldExcludeGroupsList = $appConfig->getValue('core', 'shareapi_exclude_groups_list', '');
|
$oldExcludeGroupsList = $appConfig->getValue('core', 'shareapi_exclude_groups_list', '');
|
||||||
|
@ -290,6 +294,9 @@ class ViewTest extends \Test\TestCase {
|
||||||
|
|
||||||
$appConfig->setValue('core', 'shareapi_exclude_groups', $oldExcludeGroupsFlag);
|
$appConfig->setValue('core', 'shareapi_exclude_groups', $oldExcludeGroupsFlag);
|
||||||
$appConfig->setValue('core', 'shareapi_exclude_groups_list', $oldExcludeGroupsList);
|
$appConfig->setValue('core', 'shareapi_exclude_groups_list', $oldExcludeGroupsList);
|
||||||
|
|
||||||
|
// Reset sharing disabled for users cache
|
||||||
|
$this->invokePrivate(\OC::$server->getShareManager(), 'sharingDisabledForUsersCache', [new CappedMemoryCache()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCacheIncompleteFolder() {
|
public function testCacheIncompleteFolder() {
|
||||||
|
|
Loading…
Reference in New Issue