This commit is contained in:
Yuri Kuznetsov
2021-11-11 12:17:21 +02:00
parent 42d4de77ae
commit 4bedaef9a8
8 changed files with 111 additions and 12 deletions
@@ -29,9 +29,13 @@
namespace Espo\Core\Select\Applier\Appliers;
use Espo\Core\Acl;
use Espo\Core\AclManager;
use Espo\Core\Select\OrmSelectBuilder;
use Espo\Core\{
Exceptions\Error,
AclManager,
Select\SelectManager,
Select\AccessControl\FilterFactory as AccessControlFilterFactory,
Select\AccessControl\FilterResolverFactory as AccessControlFilterResolverFactory,
@@ -44,18 +48,36 @@ use Espo\{
class AccessControlFilter
{
/**
* @var Acl
*/
protected $acl;
protected $entityType;
/**
* @var User
*/
protected $user;
/**
* @var AccessControlFilterFactory
*/
protected $accessControlFilterFactory;
/**
* @var AccessControlFilterResolverFactory
*/
protected $accessControlFilterResolverFactory;
/**
* @var AclManager
*/
protected $aclManager;
/**
* @var SelectManager
*/
protected $selectManager;
public function __construct(
@@ -79,7 +101,10 @@ class AccessControlFilter
public function apply(QueryBuilder $queryBuilder): void
{
// For backward compatibility.
if ($this->selectManager->hasInheritedAccessMethod()) {
if (
$this->selectManager->hasInheritedAccessMethod() &&
$queryBuilder instanceof OrmSelectBuilder
) {
$this->selectManager->applyAccessToQueryBuilder($queryBuilder);
return;
@@ -97,7 +122,10 @@ class AccessControlFilter
}
// For backward compatibility.
if ($this->selectManager->hasInheritedAccessFilterMethod($filterName)) {
if (
$this->selectManager->hasInheritedAccessFilterMethod($filterName) &&
$queryBuilder instanceof OrmSelectBuilder
) {
$this->selectManager->applyAccessFilterToQueryBuilder($queryBuilder, $filterName);
return;
@@ -29,6 +29,8 @@
namespace Espo\Core\Select\Applier\Appliers;
use Espo\Core\Select\OrmSelectBuilder;
use Espo\Core\{
Exceptions\Error,
Select\SelectManager,
@@ -46,10 +48,19 @@ class BoolFilterList
{
protected $entityType;
/**
* @var User
*/
protected $user;
/**
* @var SelectManager
*/
protected $selectManager;
/**
* @var BoolFilterFactory
*/
protected $boolFilterFactory;
public function __construct(
@@ -86,13 +97,16 @@ class BoolFilterList
if ($this->boolFilterFactory->has($this->entityType, $filterName)) {
$filter = $this->boolFilterFactory->create($this->entityType, $this->user, $filterName);
$whereItem = $filter->apply($queryBuilder, $orGroupBuilder);
$filter->apply($queryBuilder, $orGroupBuilder);
return;
}
// For backward compatibility.
if ($this->selectManager->hasBoolFilter($filterName)) {
if (
$this->selectManager->hasBoolFilter($filterName) &&
$queryBuilder instanceof OrmSelectBuilder
) {
$rawWhereClause = $this->selectManager->applyBoolFilterToQueryBuilder($queryBuilder, $filterName);
$whereItem = WhereClause::fromRaw($rawWhereClause);
@@ -50,10 +50,19 @@ class Order
{
protected $entityType;
/**
* @var User
*/
protected $user;
/**
* @var MetadataProvider
*/
protected $metadataProvider;
/**
* @var ItemConverterFactory
*/
protected $itemConverterFactory;
public function __construct(
@@ -80,10 +89,8 @@ class Order
if ($params->forbidComplexExpressions() && $orderBy) {
if (
!is_string($orderBy)
||
strpos($orderBy, '.') !== false
||
!is_string($orderBy) ||
strpos($orderBy, '.') !== false ||
strpos($orderBy, ':') !== false
) {
throw new Forbidden("Complex expressions are forbidden in 'orderBy'.");
@@ -112,10 +119,10 @@ class Order
if (!$order) {
$order = $this->metadataProvider->getDefaultOrder($this->entityType);
if ($order === true || strtolower($order) === 'desc') {
if (strtolower($order) === 'desc') {
$order = SearchParams::ORDER_DESC;
}
else if ($order === false || strtolower($order) === 'asc') {
else if (strtolower($order) === 'asc') {
$order = SearchParams::ORDER_ASC;
}
else if ($order !== null) {
@@ -29,6 +29,8 @@
namespace Espo\Core\Select\Applier\Appliers;
use Espo\Core\Select\OrmSelectBuilder;
use Espo\Core\{
Exceptions\Error,
Select\SelectManager,
@@ -44,10 +46,19 @@ class PrimaryFilter
{
protected $entityType;
/**
* @var User
*/
protected $user;
/**
* @var SelectManager
*/
protected $selectManager;
/**
* @var FilterFactory
*/
protected $primaryFilterFactory;
public function __construct(
@@ -73,7 +84,10 @@ class PrimaryFilter
}
// For backward compatibility.
if ($this->selectManager->hasPrimaryFilter($filterName)) {
if (
$this->selectManager->hasPrimaryFilter($filterName) &&
$queryBuilder instanceof OrmSelectBuilder
) {
$this->selectManager->applyPrimaryFilterToQueryBuilder($queryBuilder, $filterName);
return;
@@ -57,10 +57,19 @@ class Select
protected $entityType;
/**
* @var User
*/
protected $user;
/**
* @var FieldUtil
*/
protected $fieldUtil;
/**
* @var MetadataProvider
*/
protected $metadataProvider;
public function __construct(
@@ -61,12 +61,24 @@ class TextFilter
private $entityType;
/**
* @var User
*/
private $user;
/**
* @var MetadataProvider
*/
private $metadataProvider;
/**
* @var FullTextSearchDataComposerFactory
*/
private $fullTextSearchDataComposerFactory;
/**
* @var FilterFactory
*/
private $filterFactory;
public function __construct(
@@ -45,10 +45,19 @@ class Where
{
protected $entityType;
/**
* @var User
*/
protected $user;
/**
* @var ConverterFactory
*/
protected $converterFactory;
/**
* @var CheckerFactory
*/
protected $checkerFactory;
public function __construct(
@@ -39,8 +39,14 @@ class FullTextSearchDataComposer
protected $entityType;
/**
* @var Config
*/
protected $config;
/**
* @var MetadataProvider
*/
protected $metadataProvider;
public function __construct(