Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AclRetriever.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as RoleCollectionFactory;
10 use Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory as RulesCollectionFactory;
13 use Magento\Framework\Acl\Builder as AclBuilder;
16 use Psr\Log\LoggerInterface as Logger;
17 
23 {
24  const PERMISSION_ANONYMOUS = 'anonymous';
25  const PERMISSION_SELF = 'self';
26 
30  protected $logger;
31 
36 
40  protected $aclBuilder;
41 
46 
55  public function __construct(
56  AclBuilder $aclBuilder,
57  RoleCollectionFactory $roleCollectionFactory,
58  RulesCollectionFactory $rulesCollectionFactory,
59  Logger $logger
60  ) {
61  $this->logger = $logger;
62  $this->rulesCollectionFactory = $rulesCollectionFactory;
63  $this->aclBuilder = $aclBuilder;
64  $this->roleCollectionFactory = $roleCollectionFactory;
65  }
66 
76  public function getAllowedResourcesByUser($userType, $userId)
77  {
78  if ($userType == UserContextInterface::USER_TYPE_GUEST) {
81  return [self::PERMISSION_SELF];
82  }
83  try {
84  $role = $this->_getUserRole($userType, $userId);
85  if (!$role) {
86  throw new AuthorizationException(
87  __("The role wasn't found for the user. Verify the role and try again.")
88  );
89  }
90  $allowedResources = $this->getAllowedResourcesByRole($role->getId());
91  } catch (AuthorizationException $e) {
92  throw $e;
93  } catch (\Exception $e) {
94  $this->logger->critical($e);
95  throw new LocalizedException(
96  __(
97  'Something went wrong while compiling a list of allowed resources. '
98  . 'You can find out more in the exceptions log.'
99  )
100  );
101  }
102  return $allowedResources;
103  }
104 
111  public function getAllowedResourcesByRole($roleId)
112  {
113  $allowedResources = [];
114  $rulesCollection = $this->rulesCollectionFactory->create();
115  $rulesCollection->getByRoles($roleId)->load();
116  $acl = $this->aclBuilder->getAcl();
118  foreach ($rulesCollection->getItems() as $ruleItem) {
119  $resourceId = $ruleItem->getResourceId();
120  if ($acl->has($resourceId) && $acl->isAllowed($roleId, $resourceId)) {
121  $allowedResources[] = $resourceId;
122  }
123  }
124  return $allowedResources;
125  }
126 
135  protected function _getUserRole($userType, $userId)
136  {
137  if (!$this->_canRoleBeCreatedForUserType($userType)) {
138  throw new \LogicException(
139  "The role with user type '{$userType}' does not exist and cannot be created"
140  );
141  }
142  $roleCollection = $this->roleCollectionFactory->create();
144  $role = $roleCollection->setUserFilter($userId, $userType)->getFirstItem();
145  return $role->getId() ? $role : false;
146  }
147 
156  protected function _canRoleBeCreatedForUserType($userType)
157  {
158  return ($userType == UserContextInterface::USER_TYPE_INTEGRATION)
159  || ($userType == UserContextInterface::USER_TYPE_ADMIN);
160  }
161 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
__construct(AclBuilder $aclBuilder, RoleCollectionFactory $roleCollectionFactory, RulesCollectionFactory $rulesCollectionFactory, Logger $logger)
__()
Definition: __.php:13
$roleId
Definition: webapi_user.php:22
$allowedResources
Definition: get.php:17