Provider.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Acl\AclResource;
  7. use Magento\Framework\App\ObjectManager;
  8. use Magento\Framework\Serialize\Serializer\Json;
  9. class Provider implements ProviderInterface
  10. {
  11. /**
  12. * Cache key for ACL roles cache
  13. */
  14. const ACL_RESOURCES_CACHE_KEY = 'provider_acl_resources_cache';
  15. /**
  16. * @var \Magento\Framework\Config\ReaderInterface
  17. */
  18. protected $_configReader;
  19. /**
  20. * @var TreeBuilder
  21. */
  22. protected $_resourceTreeBuilder;
  23. /**
  24. * @var \Magento\Framework\Acl\Data\CacheInterface
  25. */
  26. private $aclDataCache;
  27. /**
  28. * @var Json
  29. */
  30. private $serializer;
  31. /**
  32. * @var string
  33. */
  34. private $cacheKey;
  35. /**
  36. * @param \Magento\Framework\Config\ReaderInterface $configReader
  37. * @param TreeBuilder $resourceTreeBuilder
  38. * @param \Magento\Framework\Acl\Data\CacheInterface $aclDataCache
  39. * @param Json $serializer
  40. * @param string $cacheKey
  41. */
  42. public function __construct(
  43. \Magento\Framework\Config\ReaderInterface $configReader,
  44. TreeBuilder $resourceTreeBuilder,
  45. \Magento\Framework\Acl\Data\CacheInterface $aclDataCache = null,
  46. Json $serializer = null,
  47. $cacheKey = self::ACL_RESOURCES_CACHE_KEY
  48. ) {
  49. $this->_configReader = $configReader;
  50. $this->_resourceTreeBuilder = $resourceTreeBuilder;
  51. $this->aclDataCache = $aclDataCache ?: ObjectManager::getInstance()->get(
  52. \Magento\Framework\Config\CacheInterface::class
  53. );
  54. $this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
  55. $this->cacheKey = $cacheKey;
  56. }
  57. /**
  58. * {@inheritdoc}
  59. */
  60. public function getAclResources()
  61. {
  62. $tree = $this->aclDataCache->load($this->cacheKey);
  63. if ($tree) {
  64. return $this->serializer->unserialize($tree);
  65. }
  66. $aclResourceConfig = $this->_configReader->read();
  67. if (!empty($aclResourceConfig['config']['acl']['resources'])) {
  68. $tree = $this->_resourceTreeBuilder->build($aclResourceConfig['config']['acl']['resources']);
  69. $this->aclDataCache->save($this->serializer->serialize($tree), $this->cacheKey);
  70. return $tree;
  71. }
  72. return [];
  73. }
  74. }