domainStorage = $domain_storage; $this->userStorage = $user_storage; $this->manager = $manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity_type.manager')->getStorage('domain'), $container->get('entity_type.manager')->getStorage('user'), $container->get('domain_access.manager') ); } /** * {@inheritdoc} */ public function summaryTitle() { return $this->t('Domain editor'); } /** * {@inheritdoc} */ public function access(AccountInterface $account) { // Users with this permission can see any domain content lists, and it is // required to view all affiliates. if ($account->hasPermission($this->allPermission)) { return TRUE; } // The routine below determines what domain (if any) was passed to the View. if (isset($this->view->element['#arguments'])) { foreach ($this->view->element['#arguments'] as $value) { if ($domain = $this->domainStorage->load($value)) { break; } } } // Domain found, check user permissions. if (!empty($domain)) { return $this->manager->hasDomainPermissions($account, $domain, [$this->permission]); } return FALSE; } /** * {@inheritdoc} */ public function alterRouteDefinition(Route $route) { if ($domains = $this->domainStorage->loadMultiple()) { $list = array_keys($domains); } $list[] = 'all_affiliates'; $route->setRequirement('_domain_access_views', (string) implode('+', $list)); $route->setDefault('domain_permission', $this->permission); $route->setDefault('domain_all_permission', $this->allPermission); } /** * {@inheritdoc} */ public function getCacheMaxAge() { return Cache::PERMANENT; } /** * {@inheritdoc} */ public function getCacheContexts() { return ['user']; } /** * {@inheritdoc} */ public function getCacheTags() { return []; } }