Add eca_node_access submodule: ECA events and actions for hook_node_grants() and hook_node_access_records()
### Problem/Motivation ECA Access (eca_access) reacts to `hook_ENTITY_TYPE_access`, which governs direct entity access checks but is **not** consulted by `node_access`-tagged database queries such as Views listings. As a result, per-node access granted via ECA Access is invisible to Views: a view that lists those nodes shows nothing. Drupal has a second, query-aware access system — the node grants system (`hook_node_grants()` / `hook_node_access_records()`). To make ECA-driven node access honored by listings, ECA needs to plug into that system as well. This is intentionally **nodes-only**: the grants system is a node-specific API and has no general entity equivalent. ### Proposed resolution Add a new `eca_node_access` submodule that exposes the node grants system to ECA through event/action pairs: - **Event: Node Access — node grants for an account** (`hook_node_grants()`), optionally restricted by a permission. Paired action: **Return account node grants** (sets the realm + grant IDs the account receives). - **Event: Node Access — record access grants for a node** (`hook_node_access_records()`), optionally restricted by bundle. Paired action: **Return node access granting records** (sets realm, grant IDs, and view/update/delete flags). This gives full per-account / per-node grant flexibility (realm + gid + grant_view/update/delete), which `eca_content_access` (via `content_access`) does not expose. Rejected (for now): altering `node_access`-tagged queries directly (e.g. via `hook_query_node_access_alter()`) — performance is poor (large `IN` lists), and the grants system is the recommended, query-integrated mechanism. ### Remaining tasks - Port the submodule to the 3.1.x architecture (OOP `#[Hook]` classes; `BaseHookHandler` no longer exists — see review). - Fix the blocker-level bugs found in review (uninitialized typed properties, unreachable code, wrong event interface in `appliesForWildcard()`). - Add kernel/functional test coverage. - Resolve phpcs/phpstan findings. ### User interface changes Two new ECA events and two new ECA actions become available once the `eca_node_access` submodule is enabled. No changes to existing UI. ### API changes New submodule only. No changes to existing ECA APIs. ### Data model changes None in ECA itself; the submodule writes standard `node_access` grant records via core's node grants system.
issue