8
8
namespace Divante \ClassificationTreeBundle \Service ;
9
9
10
10
use AdvancedObjectSearchBundle \Service ;
11
+ use Pimcore \Bundle \AdminBundle \Security \User \TokenStorageUserResolver ;
11
12
use Pimcore \Db ;
12
13
use Pimcore \Logger ;
13
14
use Pimcore \Model \DataObject \ClassDefinition ;
@@ -27,6 +28,9 @@ class ClassificationTreeBuilder
27
28
/** @var StoreConfig\Listing $storeConfigListing */
28
29
private $ storeConfigListing ;
29
30
31
+ /** @var TokenStorageUserResolver */
32
+ protected $ tokenStorageResolver ;
33
+
30
34
/**
31
35
* ClassificationTreeBuilder constructor.
32
36
* @param Service $searchService
@@ -274,7 +278,29 @@ public function getProductsFromGroup($nodeName, $classificationName, $limit = 30
274
278
return ['results ' => [], 'totalCount ' => 0 ];
275
279
}
276
280
277
- $ list ->setCondition ("o_id IN ( " . implode (", " , $ ids ) . ") " );
281
+ $ conditionFilters = [];
282
+ if (!$ this ->getAdminUser ()->isAdmin ()) {
283
+ $ userIds = $ this ->getAdminUser ()->getRoles ();
284
+ $ userIds [] = $ this ->getAdminUser ()->getId ();
285
+ $ userIdsAsString = implode (', ' , $ userIds );
286
+ $ conditionFilters [] =
287
+ <<<EOD
288
+ (
289
+ (
290
+ select list from users_workspaces_object where userId in ( $ userIdsAsString)
291
+ AND LOCATE(CONCAT(o_path,o_key),cpath)=1 ORDER BY LENGTH(cpath) DESC LIMIT 1
292
+ )=1
293
+ OR
294
+ (
295
+ select list from users_workspaces_object where userId in ( $ userIdsAsString)
296
+ AND LOCATE(cpath,CONCAT(o_path,o_key))=1 ORDER BY LENGTH(cpath) DESC LIMIT 1
297
+ )=1
298
+ )
299
+ EOD ;
300
+ }
301
+
302
+ $ conditionFilters [] = "o_id IN ( " . implode (", " , $ ids ) . ") " ;
303
+ $ list ->setCondition (implode (" AND " , $ conditionFilters ));
278
304
$ list ->setOrderKey (" FIELD(o_id, " . implode (", " , $ ids ) . ") " , false );
279
305
$ list ->load ();
280
306
$ result = [];
@@ -390,4 +416,21 @@ protected function getPermission(bool $isProduct = false)
390
416
"unlock " => false ,
391
417
];
392
418
}
419
+
420
+ /**
421
+ * @return \Pimcore\Model\User|null
422
+ */
423
+ protected function getAdminUser ()
424
+ {
425
+ return $ this ->tokenStorageResolver ->getUser ();
426
+ }
427
+
428
+ /**
429
+ * @required
430
+ * @param TokenStorageUserResolver $tokenStorageResolver
431
+ */
432
+ public function setTokenStorageResolver (TokenStorageUserResolver $ tokenStorageResolver ): void
433
+ {
434
+ $ this ->tokenStorageResolver = $ tokenStorageResolver ;
435
+ }
393
436
}
0 commit comments