Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Rule.php
Go to the documentation of this file.
1 <?php
7 
10 
11 class Rule implements \Magento\Framework\Acl\LoaderInterface
12 {
16  const ACL_RULE_CACHE_KEY = 'authorization_rule_cached_data';
17 
21  protected $_resource;
22 
26  private $_rootResource;
27 
31  private $aclDataCache;
32 
36  private $serializer;
37 
41  private $cacheKey;
42 
52  public function __construct(
53  \Magento\Framework\Acl\RootResource $rootResource,
54  \Magento\Framework\App\ResourceConnection $resource,
55  array $data = [],
56  \Magento\Framework\Acl\Data\CacheInterface $aclDataCache = null,
57  Json $serializer = null,
58  $cacheKey = self::ACL_RULE_CACHE_KEY
59  ) {
60  $this->_resource = $resource;
61  $this->_rootResource = $rootResource;
62  $this->aclDataCache = $aclDataCache ?: ObjectManager::getInstance()->get(
63  \Magento\Framework\Acl\Data\CacheInterface::class
64  );
65  $this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
66  $this->cacheKey = $cacheKey;
67  }
68 
75  public function populateAcl(\Magento\Framework\Acl $acl)
76  {
77  foreach ($this->getRulesArray() as $rule) {
78  $role = $rule['role_id'];
79  $resource = $rule['resource_id'];
80  $privileges = !empty($rule['privileges']) ? explode(',', $rule['privileges']) : null;
81 
82  if ($acl->has($resource)) {
83  if ($rule['permission'] == 'allow') {
84  if ($resource === $this->_rootResource->getId()) {
85  $acl->allow($role, null, $privileges);
86  }
87  $acl->allow($role, $resource, $privileges);
88  } elseif ($rule['permission'] == 'deny') {
89  $acl->deny($role, $resource, $privileges);
90  }
91  }
92  }
93  }
94 
100  private function getRulesArray()
101  {
102  $rulesCachedData = $this->aclDataCache->load($this->cacheKey);
103  if ($rulesCachedData) {
104  return $this->serializer->unserialize($rulesCachedData);
105  }
106 
107  $ruleTable = $this->_resource->getTableName("authorization_rule");
108  $connection = $this->_resource->getConnection();
109  $select = $connection->select()
110  ->from(['r' => $ruleTable]);
111 
112  $rulesArr = $connection->fetchAll($select);
113 
114  $this->aclDataCache->save($this->serializer->serialize($rulesArr), $this->cacheKey);
115 
116  return $rulesArr;
117  }
118 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$resource
Definition: bulk.php:12
populateAcl(\Magento\Framework\Acl $acl)
Definition: Rule.php:75
__construct(\Magento\Framework\Acl\RootResource $rootResource, \Magento\Framework\App\ResourceConnection $resource, array $data=[], \Magento\Framework\Acl\Data\CacheInterface $aclDataCache=null, Json $serializer=null, $cacheKey=self::ACL_RULE_CACHE_KEY)
Definition: Rule.php:52
$connection
Definition: bulk.php:13