Loading cloud.services.yml +1 −1 Original line number Diff line number Diff line services: cloud: class: Drupal\cloud\Service\CloudService arguments: ['@entity_type.manager', '@entity.definition_update_manager', '@config.manager', '@config.factory', '@config.typed', '@file_system', '@extension.path.resolver', '@module_handler', '@request_stack', '@http_client', '@plugin.manager.cloud_config_plugin', '@twig', '@token', '@plugin.manager.mail', '@language_manager', '@cache_tags.invalidator', '@cache.menu', '@cache.render', '@router.builder', '@plugin.cache_clearer', '@queue', '@file.repository'] arguments: ['@entity_type.manager', '@entity.definition_update_manager', '@config.manager', '@config.factory', '@config.typed', '@file_system', '@extension.path.resolver', '@module_handler', '@request_stack', '@http_client', '@plugin.manager.cloud_config_plugin', '@twig', '@token', '@plugin.manager.mail', '@language_manager', '@cache_tags.invalidator', '@cache.menu', '@cache.render', '@router.builder', '@plugin.cache_clearer', '@current_user', '@current_route_match', '@user.permissions', '@queue', '@file.repository'] cloud.subscriber: class: Drupal\cloud\EventSubscriber\CloudSubscriber arguments: ['@entity_type.manager', '@current_route_match', '@current_user'] Loading modules/cloud_service_providers/k8s/k8s.module +1 −34 Original line number Diff line number Diff line Loading @@ -424,7 +424,7 @@ function k8s_query_k8s_entity_views_access_alter(AlterableInterface $query): voi } // Add owner condition. k8s_build_owner_query_condition($query); \Drupal::service('cloud')->buildOwnerQueryCondition($query); } /** Loading Loading @@ -488,39 +488,6 @@ function k8s_build_namespace_query_condition(AlterableInterface $query): void { } } /** * Add query condition to check any/own query parameter for K8s entities. */ function k8s_build_owner_query_condition(AlterableInterface $query): void { if (!$account = $query->getMetaData('account')) { $account = \Drupal::currentUser(); } $route_name = \Drupal::routeMatch()->getRouteName(); // Regex extracts entity_type from view.*.list and view.*.all. if (preg_match('@^view.(.*).(list|all)$@', $route_name, $matches) !== FALSE && !empty($matches)) { $entity_type = $matches[1]; // Use a static trait method through CloudService. $entity_type_name = CloudService::convertUnderscoreToWhitespace($entity_type); // Check if the permission exists. $permission_name = "view any $entity_type_name"; $permissions = \Drupal::service('user.permissions')->getPermissions(); if (empty($permissions[$permission_name])) { return; } if ($account->hasPermission($permission_name)) { return; } // Add a uid condition. $query->condition("$entity_type.uid", $account->id()); } } /** * Implements hook_query_TAG_Alter(). */ Loading modules/cloud_service_providers/vmware/src/Entity/VmwareHostViewsData.php +3 −1 Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ class VmwareHostViewsData extends EntityViewsData { */ public function getViewsData(): array { $data = parent::getViewsData(); $base_table = $this->entityType->getBaseTable() ?: $this->entityType->id(); // Additional information for Views integration, such as table joins, can be // put here. // Add access check query tag. $data[$base_table]['table']['base']['access query tag'] = 'vmware_entity_views_access'; return $data; } Loading modules/cloud_service_providers/vmware/src/Entity/VmwareVmViewsData.php +3 −2 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ class VmwareVmViewsData extends EntityViewsData { */ public function getViewsData(): array { $data = parent::getViewsData(); $base_table = $this->entityType->getBaseTable() ?: $this->entityType->id(); // Additional information for Views integration, such as table joins, can be // put here. $data['vmware_vm']['vm_bulk_form'] = [ Loading @@ -24,7 +24,8 @@ class VmwareVmViewsData extends EntityViewsData { 'id' => 'vm_bulk_form', ], ]; // Add access check query tag. $data[$base_table]['table']['base']['access query tag'] = 'vmware_entity_views_access'; return $data; } Loading modules/cloud_service_providers/vmware/vmware.module +8 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ use Drupal\cloud\Entity\CloudConfig; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Database\Query\AlterableInterface; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\EntityInterface; Loading Loading @@ -559,3 +560,10 @@ function vmware_vmware_host_predelete(VmwareHost $entity): void { // Delete tags. $vmware_service->deleteCreatedByTags($entity, $entity->getHost()); } /** * Implements hook_query_tag_alter(). */ function vmware_query_vmware_entity_views_access_alter(AlterableInterface $query): void { \Drupal::service('cloud')->buildOwnerQueryCondition($query); } Loading
cloud.services.yml +1 −1 Original line number Diff line number Diff line services: cloud: class: Drupal\cloud\Service\CloudService arguments: ['@entity_type.manager', '@entity.definition_update_manager', '@config.manager', '@config.factory', '@config.typed', '@file_system', '@extension.path.resolver', '@module_handler', '@request_stack', '@http_client', '@plugin.manager.cloud_config_plugin', '@twig', '@token', '@plugin.manager.mail', '@language_manager', '@cache_tags.invalidator', '@cache.menu', '@cache.render', '@router.builder', '@plugin.cache_clearer', '@queue', '@file.repository'] arguments: ['@entity_type.manager', '@entity.definition_update_manager', '@config.manager', '@config.factory', '@config.typed', '@file_system', '@extension.path.resolver', '@module_handler', '@request_stack', '@http_client', '@plugin.manager.cloud_config_plugin', '@twig', '@token', '@plugin.manager.mail', '@language_manager', '@cache_tags.invalidator', '@cache.menu', '@cache.render', '@router.builder', '@plugin.cache_clearer', '@current_user', '@current_route_match', '@user.permissions', '@queue', '@file.repository'] cloud.subscriber: class: Drupal\cloud\EventSubscriber\CloudSubscriber arguments: ['@entity_type.manager', '@current_route_match', '@current_user'] Loading
modules/cloud_service_providers/k8s/k8s.module +1 −34 Original line number Diff line number Diff line Loading @@ -424,7 +424,7 @@ function k8s_query_k8s_entity_views_access_alter(AlterableInterface $query): voi } // Add owner condition. k8s_build_owner_query_condition($query); \Drupal::service('cloud')->buildOwnerQueryCondition($query); } /** Loading Loading @@ -488,39 +488,6 @@ function k8s_build_namespace_query_condition(AlterableInterface $query): void { } } /** * Add query condition to check any/own query parameter for K8s entities. */ function k8s_build_owner_query_condition(AlterableInterface $query): void { if (!$account = $query->getMetaData('account')) { $account = \Drupal::currentUser(); } $route_name = \Drupal::routeMatch()->getRouteName(); // Regex extracts entity_type from view.*.list and view.*.all. if (preg_match('@^view.(.*).(list|all)$@', $route_name, $matches) !== FALSE && !empty($matches)) { $entity_type = $matches[1]; // Use a static trait method through CloudService. $entity_type_name = CloudService::convertUnderscoreToWhitespace($entity_type); // Check if the permission exists. $permission_name = "view any $entity_type_name"; $permissions = \Drupal::service('user.permissions')->getPermissions(); if (empty($permissions[$permission_name])) { return; } if ($account->hasPermission($permission_name)) { return; } // Add a uid condition. $query->condition("$entity_type.uid", $account->id()); } } /** * Implements hook_query_TAG_Alter(). */ Loading
modules/cloud_service_providers/vmware/src/Entity/VmwareHostViewsData.php +3 −1 Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ class VmwareHostViewsData extends EntityViewsData { */ public function getViewsData(): array { $data = parent::getViewsData(); $base_table = $this->entityType->getBaseTable() ?: $this->entityType->id(); // Additional information for Views integration, such as table joins, can be // put here. // Add access check query tag. $data[$base_table]['table']['base']['access query tag'] = 'vmware_entity_views_access'; return $data; } Loading
modules/cloud_service_providers/vmware/src/Entity/VmwareVmViewsData.php +3 −2 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ class VmwareVmViewsData extends EntityViewsData { */ public function getViewsData(): array { $data = parent::getViewsData(); $base_table = $this->entityType->getBaseTable() ?: $this->entityType->id(); // Additional information for Views integration, such as table joins, can be // put here. $data['vmware_vm']['vm_bulk_form'] = [ Loading @@ -24,7 +24,8 @@ class VmwareVmViewsData extends EntityViewsData { 'id' => 'vm_bulk_form', ], ]; // Add access check query tag. $data[$base_table]['table']['base']['access query tag'] = 'vmware_entity_views_access'; return $data; } Loading
modules/cloud_service_providers/vmware/vmware.module +8 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ use Drupal\cloud\Entity\CloudConfig; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Database\Query\AlterableInterface; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\EntityInterface; Loading Loading @@ -559,3 +560,10 @@ function vmware_vmware_host_predelete(VmwareHost $entity): void { // Delete tags. $vmware_service->deleteCreatedByTags($entity, $entity->getHost()); } /** * Implements hook_query_tag_alter(). */ function vmware_query_vmware_entity_views_access_alter(AlterableInterface $query): void { \Drupal::service('cloud')->buildOwnerQueryCondition($query); }