mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
Add user enabled state backend feature
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
parent
b313e2a507
commit
3af1ab2b2a
2 changed files with 77 additions and 9 deletions
|
|
@ -55,6 +55,7 @@ use OCP\User\GetQuotaEvent;
|
|||
use OCP\User\Backend\ISetDisplayNameBackend;
|
||||
use OCP\User\Backend\ISetPasswordBackend;
|
||||
use OCP\User\Backend\IProvideAvatarBackend;
|
||||
use OCP\User\Backend\IProvideEnabledStateBackend;
|
||||
use OCP\User\Backend\IGetHomeBackend;
|
||||
use OCP\UserInterface;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
|
@ -432,25 +433,45 @@ class User implements IUser {
|
|||
* @return bool
|
||||
*/
|
||||
public function isEnabled() {
|
||||
if ($this->enabled === null) {
|
||||
$enabled = $this->config->getUserValue($this->uid, 'core', 'enabled', 'true');
|
||||
$this->enabled = $enabled === 'true';
|
||||
$queryDatabaseValue = function (): bool {
|
||||
if ($this->enabled === null) {
|
||||
$enabled = $this->config->getUserValue($this->uid, 'core', 'enabled', 'true');
|
||||
$this->enabled = $enabled === 'true';
|
||||
}
|
||||
return (bool) $this->enabled;
|
||||
};
|
||||
if ($this->backend instanceof IProvideEnabledStateBackend) {
|
||||
return $this->backend->isUserEnabled($this->uid, $queryDatabaseValue);
|
||||
} else {
|
||||
return $queryDatabaseValue();
|
||||
}
|
||||
return (bool) $this->enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* set the enabled status for the user
|
||||
*
|
||||
* @param bool $enabled
|
||||
* @return void
|
||||
*/
|
||||
public function setEnabled(bool $enabled = true) {
|
||||
$oldStatus = $this->isEnabled();
|
||||
$this->enabled = $enabled;
|
||||
if ($oldStatus !== $this->enabled) {
|
||||
// TODO: First change the value, then trigger the event as done for all other properties.
|
||||
$this->triggerChange('enabled', $enabled, $oldStatus);
|
||||
$setDatabaseValue = function (bool $enabled): void {
|
||||
$this->config->setUserValue($this->uid, 'core', 'enabled', $enabled ? 'true' : 'false');
|
||||
$this->enabled = $enabled;
|
||||
};
|
||||
if ($this->backend instanceof IProvideEnabledStateBackend) {
|
||||
$queryDatabaseValue = function (): bool {
|
||||
if ($this->enabled === null) {
|
||||
$enabled = $this->config->getUserValue($this->uid, 'core', 'enabled', 'true');
|
||||
$this->enabled = $enabled === 'true';
|
||||
}
|
||||
return (bool) $this->enabled;
|
||||
};
|
||||
$this->backend->setUserEnabled($this->uid, $enabled, $queryDatabaseValue, $setDatabaseValue);
|
||||
} else {
|
||||
$setDatabaseValue($enabled);
|
||||
}
|
||||
if ($oldStatus !== $enabled) {
|
||||
$this->triggerChange('enabled', $enabled, $oldStatus);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
47
lib/public/User/Backend/IProvideEnabledStateBackend.php
Normal file
47
lib/public/User/Backend/IProvideEnabledStateBackend.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com>
|
||||
*
|
||||
* @author Côme Chilliet <come.chilliet@nextcloud.com>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCP\User\Backend;
|
||||
|
||||
/**
|
||||
* @since 26.0.0
|
||||
*/
|
||||
interface IProvideEnabledStateBackend {
|
||||
/**
|
||||
* @since 26.0.0
|
||||
*
|
||||
* @param callable():bool $queryDatabaseValue A callable to query the enabled state from database
|
||||
*/
|
||||
public function isUserEnabled(string $uid, callable $queryDatabaseValue): bool;
|
||||
|
||||
/**
|
||||
* @since 26.0.0
|
||||
*
|
||||
* @param callable():bool $queryDatabaseValue A callable to query the enabled state from database
|
||||
* @param callable(bool):void $setDatabaseValue A callable to set the enabled state in the database.
|
||||
*/
|
||||
public function setUserEnabled(string $uid, bool $enabled, callable $queryDatabaseValue, callable $setDatabaseValue): void;
|
||||
}
|
||||
Loading…
Reference in a new issue