- saves some overhead costs - in some occasions saves LDAP requests Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>tags/v19.0.0beta6
@@ -60,7 +60,9 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet | |||
$cacheKey = $this->getGroupCacheKey($gid); | |||
foreach ($this->backends as $configPrefix => $backend) { | |||
if ($result = call_user_func_array([$backend, $method], $parameters)) { | |||
$this->writeToCache($cacheKey, $configPrefix); | |||
if(!$this->isSingleBackend()) { | |||
$this->writeToCache($cacheKey, $configPrefix); | |||
} | |||
return $result; | |||
} | |||
} | |||
@@ -99,6 +101,10 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet | |||
return false; | |||
} | |||
protected function activeBackends(): int { | |||
return count($this->backends); | |||
} | |||
/** | |||
* is user in group? | |||
* @param string $uid uid of the user |
@@ -40,6 +40,8 @@ use OCA\User_LDAP\User\Manager; | |||
abstract class Proxy { | |||
private static $accesses = []; | |||
private $ldap = null; | |||
/** @var bool */ | |||
private $isSingleBackend; | |||
/** @var \OCP\ICache|null */ | |||
private $cache; | |||
@@ -139,6 +141,15 @@ abstract class Proxy { | |||
*/ | |||
abstract public function getLDAPAccess($id); | |||
abstract protected function activeBackends(): int; | |||
protected function isSingleBackend(): bool{ | |||
if($this->isSingleBackend === null) { | |||
$this->isSingleBackend = $this->activeBackends() === 1; | |||
} | |||
return $this->isSingleBackend; | |||
} | |||
/** | |||
* Takes care of the request to the User backend | |||
* @param string $id | |||
@@ -148,8 +159,10 @@ abstract class Proxy { | |||
* @return mixed, the result of the specified method | |||
*/ | |||
protected function handleRequest($id, $method, $parameters, $passOnWhen = false) { | |||
$result = $this->callOnLastSeenOn($id, $method, $parameters, $passOnWhen); | |||
if ($result === $passOnWhen) { | |||
if (!$this->isSingleBackend()) { | |||
$result = $this->callOnLastSeenOn($id, $method, $parameters, $passOnWhen); | |||
} | |||
if (!isset($result) || $result === $passOnWhen) { | |||
$result = $this->walkBackends($id, $method, $parameters); | |||
} | |||
return $result; |
@@ -86,7 +86,9 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, | |||
$instance = $this->getAccess($configPrefix); | |||
} | |||
if ($result = call_user_func_array([$instance, $method], $parameters)) { | |||
$this->writeToCache($cacheKey, $configPrefix); | |||
if(!$this->isSingleBackend()) { | |||
$this->writeToCache($cacheKey, $configPrefix); | |||
} | |||
return $result; | |||
} | |||
} | |||
@@ -130,6 +132,10 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, | |||
return false; | |||
} | |||
protected function activeBackends(): int { | |||
return count($this->backends); | |||
} | |||
/** | |||
* Check if backend implements actions | |||
* @param int $actions bitwise-or'ed actions |