Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Rules.php
Go to the documentation of this file.
1 <?php
8 
10 
15 {
21  protected $_rootResource;
22 
26  protected $_aclBuilder;
27 
31  protected $_logger;
32 
36  private $aclDataCache;
37 
46  public function __construct(
47  \Magento\Framework\Model\ResourceModel\Db\Context $context,
48  \Magento\Framework\Acl\Builder $aclBuilder,
49  \Psr\Log\LoggerInterface $logger,
50  \Magento\Framework\Acl\RootResource $rootResource,
51  $connectionName = null,
52  \Magento\Framework\Acl\Data\CacheInterface $aclDataCache = null
53  ) {
54  $this->_aclBuilder = $aclBuilder;
55  parent::__construct($context, $connectionName);
56  $this->_rootResource = $rootResource;
57  $this->_logger = $logger;
58  $this->aclDataCache = $aclDataCache ?: ObjectManager::getInstance()->get(
59  \Magento\Framework\Acl\Data\CacheInterface::class
60  );
61  }
62 
68  protected function _construct()
69  {
70  $this->_init('authorization_rule', 'rule_id');
71  }
72 
80  public function saveRel(\Magento\Authorization\Model\Rules $rule)
81  {
82  $connection = $this->getConnection();
83  try {
84  $connection->beginTransaction();
85  $roleId = $rule->getRoleId();
86 
87  $condition = ['role_id = ?' => (int)$roleId];
88 
89  $connection->delete($this->getMainTable(), $condition);
90 
91  $postedResources = $rule->getResources();
92  if ($postedResources) {
93  $row = [
94  'resource_id' => $this->_rootResource->getId(),
95  'privileges' => '', // not used yet
96  'role_id' => $roleId,
97  'permission' => 'allow',
98  ];
99 
100  // If all was selected save it only and nothing else.
101  if ($postedResources === [$this->_rootResource->getId()]) {
102  $insertData = $this->_prepareDataForTable(
103  new \Magento\Framework\DataObject($row),
104  $this->getMainTable()
105  );
106 
107  $connection->insert($this->getMainTable(), $insertData);
108  } else {
111  $acl = $this->_aclBuilder->getAcl();
113  foreach ($acl->getResources() as $resourceId) {
114  $row['permission'] = in_array($resourceId, $postedResources) ? 'allow' : 'deny';
115  $row['resource_id'] = $resourceId;
116 
117  $insertData = $this->_prepareDataForTable(
118  new \Magento\Framework\DataObject($row),
119  $this->getMainTable()
120  );
121  $connection->insert($this->getMainTable(), $insertData);
122  }
123  }
124  }
125 
126  $connection->commit();
127  $this->aclDataCache->clean();
128  } catch (\Magento\Framework\Exception\LocalizedException $e) {
129  $connection->rollBack();
130  throw $e;
131  } catch (\Exception $e) {
132  $connection->rollBack();
133  $this->_logger->critical($e);
134  }
135  }
136 }
$logger
$roleId
Definition: webapi_user.php:22
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Acl\Builder $aclBuilder, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Acl\RootResource $rootResource, $connectionName=null, \Magento\Framework\Acl\Data\CacheInterface $aclDataCache=null)
Definition: Rules.php:46
$connection
Definition: bulk.php:13