don't circulate with only one backend
- saves some overhead costs - in some occasions saves LDAP requests Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
e8ddb4718c
commit
cc31c38277
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue