Permissions by Entity PHP notice for Commerce Product entities

Created on 3 September 2021, about 3 years ago
Updated 16 August 2023, about 1 year ago

Problem/Motivation

When viewing a Commerce Product entity (Drupal\commerce_product\Entity\Product) with a term reference field that's access controlled, it results in this PHP notice:

Notice: Undefined property: Drupal\commerce_product\Plugin\Field\ComputedDefaultVariation::$entity in Drupal\permissions_by_entity\Service\AccessChecker->isAccessControlled() (line 182 of modules\contrib\permissions_by_term\modules\permissions_by_entity\src\Service\AccessChecker.php).

Drupal\permissions_by_entity\Service\AccessChecker->isAccessControlled(Object, ) (Line: 228)
Drupal\permissions_by_entity\Service\AccessChecker->isAccessControlled(Object) (Line: 32)
permissions_by_entity_entity_access(Object, 'view', Object)
call_user_func_array('permissions_by_entity_entity_access', Array) (Line: 403)
Drupal\Core\Extension\ModuleHandler->invokeAll('entity_access', Array) (Line: 96)
Drupal\Core\Entity\EntityAccessControlHandler->access(Object, 'view', Object, ) (Line: 709)
Drupal\Core\Entity\ContentEntityBase->access('view') (Line: 242)
Drupal\commerce_product\Entity\Product->getDefaultVariation() (Line: 21)
Drupal\commerce_product\Plugin\Field\ComputedDefaultVariation->computeValue() (Line: 34)
Drupal\commerce_product\Plugin\Field\ComputedDefaultVariation->ensureComputedValue() (Line: 81)
Drupal\commerce_product\Plugin\Field\ComputedDefaultVariation->get(0) (Line: 169)
Drupal\Core\TypedData\Plugin\DataType\ItemList->first() (Line: 115)
Drupal\Core\Field\FieldItemList->__get('entity') (Line: 182)
Drupal\permissions_by_entity\Service\AccessChecker->isAccessControlled(Object, ) (Line: 228)
Drupal\permissions_by_entity\Service\AccessChecker->isAccessControlled(Object, ) (Line: 228)
Drupal\permissions_by_entity\Service\AccessChecker->isAccessControlled(Object) (Line: 32)
permissions_by_entity_entity_access(Object, 'view', Object)
call_user_func_array('permissions_by_entity_entity_access', Array) (Line: 403)
Drupal\Core\Extension\ModuleHandler->invokeAll('entity_access', Array) (Line: 96)
Drupal\Core\Entity\EntityAccessControlHandler->access(Object, 'view', Object, 1) (Line: 709)
Drupal\Core\Entity\ContentEntityBase->access('view', Object, 1) (Line: 65)
Drupal\Core\Entity\EntityAccessCheck->access(Object, Object, Object)
call_user_func_array(Array, Array) (Line: 159)
Drupal\Core\Access\AccessManager->performCheck('access_check.entity', Object) (Line: 135)
Drupal\Core\Access\AccessManager->check(Object, Object, Object, 1) (Line: 112)
Drupal\Core\Access\AccessManager->checkRequest(Object, Object, 1) (Line: 109)
Drupal\Core\Routing\AccessAwareRouter->checkAccess(Object) (Line: 94)
Drupal\Core\Routing\AccessAwareRouter->matchRequest(Object) (Line: 113)
Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 111)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.request', Object) (Line: 127)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 68)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 57)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 52)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 49)
Drupal\remove_http_headers\StackMiddleware\RemoveHttpHeadersMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 708)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

Steps to reproduce

Commerce core 8.x-2.26
Permissions by Term 8.x-2.34

Proposed resolution

Use isset($something->entity) to check for referenced entities rather than $something->entity in Drupal\permissions_by_entity\Service\AccessChecker.

Remaining tasks

See above.

User interface changes

None.

API changes

None.

Data model changes

None.

🐛 Bug report
Status

Fixed

Version

3.1

Component

Code

Created by

🇨🇦Canada ambient.impact Toronto

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

Production build 0.71.5 2024