mirror of
https://github.com/espocrm/espocrm.git
synced 2026-06-28 15:06:06 +00:00
ref
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
|
||||
namespace Espo\Classes\MassAction\User;
|
||||
|
||||
use Espo\Core\ApplicationUser;
|
||||
use Espo\Core\MassAction\Actions\MassUpdate as MassUpdateOriginal;
|
||||
use Espo\Core\MassAction\QueryBuilder;
|
||||
use Espo\Core\MassAction\Params;
|
||||
@@ -50,16 +51,7 @@ use Espo\Tools\MassUpdate\Data as MassUpdateData;
|
||||
|
||||
class MassUpdate implements MassAction
|
||||
{
|
||||
private MassUpdateOriginal $massUpdateOriginal;
|
||||
private QueryBuilder $queryBuilder;
|
||||
private EntityManager $entityManager;
|
||||
private Acl $acl;
|
||||
private User $user;
|
||||
private FileManager $fileManager;
|
||||
private DataManager $dataManager;
|
||||
|
||||
private const PERMISSION = 'massUpdatePermission';
|
||||
private const SYSTEM_USER_ID = 'system';
|
||||
|
||||
/** @var string[] */
|
||||
private array $notAllowedAttributeList = [
|
||||
@@ -72,22 +64,14 @@ class MassUpdate implements MassAction
|
||||
];
|
||||
|
||||
public function __construct(
|
||||
MassUpdateOriginal $massUpdateOriginal,
|
||||
QueryBuilder $queryBuilder,
|
||||
EntityManager $entityManager,
|
||||
Acl $acl,
|
||||
User $user,
|
||||
FileManager $fileManager,
|
||||
DataManager $dataManager
|
||||
) {
|
||||
$this->massUpdateOriginal = $massUpdateOriginal;
|
||||
$this->queryBuilder = $queryBuilder;
|
||||
$this->entityManager = $entityManager;
|
||||
$this->acl = $acl;
|
||||
$this->user = $user;
|
||||
$this->fileManager = $fileManager;
|
||||
$this->dataManager = $dataManager;
|
||||
}
|
||||
private MassUpdateOriginal $massUpdateOriginal,
|
||||
private QueryBuilder $queryBuilder,
|
||||
private EntityManager $entityManager,
|
||||
private Acl $acl,
|
||||
private User $user,
|
||||
private FileManager $fileManager,
|
||||
private DataManager $dataManager
|
||||
) {}
|
||||
|
||||
/**
|
||||
* @throws Forbidden
|
||||
@@ -149,7 +133,7 @@ class MassUpdate implements MassAction
|
||||
*/
|
||||
private function checkEntity(Entity $entity, MassUpdateData $data): void
|
||||
{
|
||||
if ($entity->getId() === self::SYSTEM_USER_ID) {
|
||||
if ($entity->getId() === ApplicationUser::SYSTEM_USER_ID) {
|
||||
throw new Forbidden("Can't update 'system' user.");
|
||||
}
|
||||
|
||||
|
||||
@@ -30,40 +30,31 @@
|
||||
namespace Espo\Classes\Select\User\AccessControlFilters;
|
||||
|
||||
use Espo\ORM\Query\SelectBuilder;
|
||||
|
||||
use Espo\Core\{
|
||||
Select\AccessControl\Filter,
|
||||
AclManager,
|
||||
Acl\Table,
|
||||
};
|
||||
|
||||
use Espo\Core\Acl\Table;
|
||||
use Espo\Core\AclManager;
|
||||
use Espo\Core\Select\AccessControl\Filter;
|
||||
use Espo\Entities\User;
|
||||
|
||||
class Mandatory implements Filter
|
||||
{
|
||||
private $user;
|
||||
|
||||
private $aclManager;
|
||||
|
||||
public function __construct(User $user, AclManager $aclManager)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->aclManager = $aclManager;
|
||||
}
|
||||
public function __construct(
|
||||
private User $user,
|
||||
private AclManager $aclManager
|
||||
) {}
|
||||
|
||||
public function apply(SelectBuilder $queryBuilder): void
|
||||
{
|
||||
if (!$this->user->isAdmin()) {
|
||||
$queryBuilder->where([
|
||||
'isActive' => true,
|
||||
'type!=' => 'api',
|
||||
'type!=' => User::TYPE_API,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($this->aclManager->getPermissionLevel($this->user, 'portalPermission') !== Table::LEVEL_YES) {
|
||||
$queryBuilder->where([
|
||||
'OR' => [
|
||||
'type!=' => 'portal',
|
||||
'type!=' => User::TYPE_PORTAL,
|
||||
'id' => $this->user->getId(),
|
||||
]
|
||||
]);
|
||||
@@ -71,12 +62,12 @@ class Mandatory implements Filter
|
||||
|
||||
if (!$this->user->isSuperAdmin()) {
|
||||
$queryBuilder->where([
|
||||
'type!=' => 'super-admin'
|
||||
'type!=' => User::TYPE_SUPER_ADMIN,
|
||||
]);
|
||||
}
|
||||
|
||||
$queryBuilder->where([
|
||||
'type!=' => 'system'
|
||||
'type!=' => User::TYPE_SYSTEM,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
namespace Espo\Classes\Select\User\PrimaryFilters;
|
||||
|
||||
use Espo\Core\Select\Primary\Filter;
|
||||
use Espo\Entities\User;
|
||||
use Espo\ORM\Query\SelectBuilder;
|
||||
|
||||
class Internal implements Filter
|
||||
@@ -37,7 +38,11 @@ class Internal implements Filter
|
||||
public function apply(SelectBuilder $queryBuilder): void
|
||||
{
|
||||
$queryBuilder->where([
|
||||
'type!=' => ['portal', 'api', 'system'],
|
||||
'type!=' => [
|
||||
User::TYPE_PORTAL,
|
||||
User::TYPE_API,
|
||||
User::TYPE_SYSTEM,
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,16 +29,12 @@
|
||||
|
||||
namespace Espo\Classes\Select\User\Where\ItemConverters;
|
||||
|
||||
use Espo\Core\{
|
||||
Select\Where\ItemConverter,
|
||||
Select\Where\Item,
|
||||
};
|
||||
|
||||
use Espo\{
|
||||
ORM\Query\SelectBuilder as QueryBuilder,
|
||||
ORM\Query\Part\WhereItem as WhereClauseItem,
|
||||
ORM\Query\Part\WhereClause,
|
||||
};
|
||||
use Espo\Core\Select\Where\Item;
|
||||
use Espo\Core\Select\Where\ItemConverter;
|
||||
use Espo\Entities\User;
|
||||
use Espo\ORM\Query\Part\WhereClause;
|
||||
use Espo\ORM\Query\Part\WhereItem as WhereClauseItem;
|
||||
use Espo\ORM\Query\SelectBuilder as QueryBuilder;
|
||||
|
||||
class IsOfType implements ItemConverter
|
||||
{
|
||||
@@ -46,23 +42,21 @@ class IsOfType implements ItemConverter
|
||||
{
|
||||
$type = $item->getValue();
|
||||
|
||||
switch ($type) {
|
||||
case 'internal':
|
||||
return WhereClause::fromRaw([
|
||||
'type!=' => ['portal', 'api', 'system'],
|
||||
]);
|
||||
|
||||
case 'api':
|
||||
return WhereClause::fromRaw([
|
||||
'type' => 'api',
|
||||
]);
|
||||
|
||||
case 'portal':
|
||||
return WhereClause::fromRaw([
|
||||
'type' => 'portal',
|
||||
]);
|
||||
}
|
||||
|
||||
return WhereClause::fromRaw(['id' => null]);
|
||||
return match ($type) {
|
||||
'internal' => WhereClause::fromRaw([
|
||||
'type!=' => [
|
||||
User::TYPE_PORTAL,
|
||||
User::TYPE_API,
|
||||
User::TYPE_SYSTEM,
|
||||
],
|
||||
]),
|
||||
User::TYPE_API => WhereClause::fromRaw([
|
||||
'type' => User::TYPE_API,
|
||||
]),
|
||||
User::TYPE_SYSTEM => WhereClause::fromRaw([
|
||||
'type' => User::TYPE_SYSTEM,
|
||||
]),
|
||||
default => WhereClause::fromRaw(['id' => null]),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,14 +41,10 @@ class ApplicationUser
|
||||
{
|
||||
public const SYSTEM_USER_ID = 'system';
|
||||
|
||||
private Container $container;
|
||||
private EntityManagerProxy $entityManagerProxy;
|
||||
|
||||
public function __construct(Container $container, EntityManagerProxy $entityManagerProxy)
|
||||
{
|
||||
$this->container = $container;
|
||||
$this->entityManagerProxy = $entityManagerProxy;
|
||||
}
|
||||
public function __construct(
|
||||
private Container $container,
|
||||
private EntityManagerProxy $entityManagerProxy
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Set up the system user as a current user. The system user is used when no user is logged in.
|
||||
|
||||
@@ -29,39 +29,29 @@
|
||||
|
||||
namespace Espo\Core\Loaders;
|
||||
|
||||
use Espo\Core\{
|
||||
Container\Loader,
|
||||
ORM\EntityManager,
|
||||
ApplicationState,
|
||||
};
|
||||
use Espo\Core\ApplicationState;
|
||||
use Espo\Core\ApplicationUser as ApplicationUser;
|
||||
use Espo\Core\Container\Loader;
|
||||
use Espo\Core\ORM\EntityManager;
|
||||
|
||||
use Espo\Entities\{
|
||||
Preferences as PreferencesService,
|
||||
};
|
||||
use Espo\Entities\Preferences as PreferencesEntity;
|
||||
|
||||
class Preferences implements Loader
|
||||
{
|
||||
private $entityManager;
|
||||
public function __construct(
|
||||
private EntityManager $entityManager,
|
||||
private ApplicationState $applicationState
|
||||
) {}
|
||||
|
||||
private $applicationState;
|
||||
|
||||
public function __construct(EntityManager $entityManager, ApplicationState $applicationState)
|
||||
public function load(): PreferencesEntity
|
||||
{
|
||||
$this->entityManager = $entityManager;
|
||||
$this->applicationState = $applicationState;
|
||||
}
|
||||
|
||||
public function load(): PreferencesService
|
||||
{
|
||||
$id = 'system';
|
||||
$id = ApplicationUser::SYSTEM_USER_ID;
|
||||
|
||||
if ($this->applicationState->hasUser()) {
|
||||
$id = $this->applicationState->getUser()->getId();
|
||||
}
|
||||
|
||||
/** @var PreferencesService $entity */
|
||||
$entity = $this->entityManager->getEntity('Preferences', $id);
|
||||
|
||||
return $entity;
|
||||
/** @var PreferencesEntity */
|
||||
return $this->entityManager->getEntity(PreferencesEntity::ENTITY_TYPE, $id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
namespace Espo\Core\MassAction\Actions;
|
||||
|
||||
use Espo\Core\ApplicationUser;
|
||||
use Espo\Core\Exceptions\Forbidden;
|
||||
use Espo\Core\MassAction\Data;
|
||||
use Espo\Core\MassAction\MassAction;
|
||||
@@ -40,19 +41,11 @@ use Espo\Entities\User;
|
||||
|
||||
class MassRecalculateFormula implements MassAction
|
||||
{
|
||||
private QueryBuilder $queryBuilder;
|
||||
private EntityManager $entityManager;
|
||||
private User $user;
|
||||
|
||||
public function __construct(
|
||||
QueryBuilder $queryBuilder,
|
||||
EntityManager $entityManager,
|
||||
User $user
|
||||
) {
|
||||
$this->queryBuilder = $queryBuilder;
|
||||
$this->entityManager = $entityManager;
|
||||
$this->user = $user;
|
||||
}
|
||||
private QueryBuilder $queryBuilder,
|
||||
private EntityManager $entityManager,
|
||||
private User $user
|
||||
) {}
|
||||
|
||||
public function process(Params $params, Data $data): Result
|
||||
{
|
||||
@@ -76,7 +69,7 @@ class MassRecalculateFormula implements MassAction
|
||||
|
||||
foreach ($collection as $entity) {
|
||||
$this->entityManager->saveEntity($entity, [
|
||||
'modifiedById' => 'system',
|
||||
'modifiedById' => ApplicationUser::SYSTEM_USER_ID,
|
||||
]);
|
||||
|
||||
/** @var string $id */
|
||||
|
||||
@@ -59,6 +59,7 @@ class AddSystemUser implements RebuildAction
|
||||
|
||||
$user = $repository->getNew();
|
||||
$user->set($attributes);
|
||||
$user->set('id', $userId);
|
||||
$repository->save($user);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ return [
|
||||
'delete' => 'delete',
|
||||
],
|
||||
'systemUserAttributes' => [
|
||||
'id' => 'system',
|
||||
'userName' => 'system',
|
||||
'firstName' => '',
|
||||
'lastName' => 'System',
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
namespace Espo\Tools\MassUpdate;
|
||||
|
||||
use Espo\Core\ApplicationUser;
|
||||
use Espo\Core\Exceptions\NotFound;
|
||||
use Espo\Core\MassAction\Params;
|
||||
use Espo\Core\MassAction\Result;
|
||||
use Espo\Core\MassAction\MassActionFactory;
|
||||
@@ -44,12 +46,10 @@ use RuntimeException;
|
||||
class MassUpdate
|
||||
{
|
||||
private MassActionFactory $massActionFactory;
|
||||
|
||||
private EntityManager $entityManager;
|
||||
|
||||
private const ACTION = 'massUpdate';
|
||||
|
||||
private const DEFAULT_USER_ID = 'system';
|
||||
private const DEFAULT_USER_ID = ApplicationUser::SYSTEM_USER_ID;
|
||||
|
||||
public function __construct(MassActionFactory $massActionFactory, EntityManager $entityManager)
|
||||
{
|
||||
@@ -59,8 +59,8 @@ class MassUpdate
|
||||
|
||||
/**
|
||||
* @param ?User $user Under what user to perform mass-update. If not specified, the system user will be used.
|
||||
* Access control is applied for the user.
|
||||
* @throws \Espo\Core\Exceptions\NotFound
|
||||
* Access control is applied for the user.
|
||||
* @throws NotFound
|
||||
*/
|
||||
public function process(Params $params, Data $data, ?User $user = null): Result
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user