Skip to main content
Use an AI access catalog provider when your extension needs to expose module access, AI feature permissions, or record-level permissions through T3AF. Runtime enforcement uses the merged catalog from all registered providers. You do not need EXTCONF wiring for new integrations.

When to use this

Implement a provider when your extension:
  • exposes a backend module that should be controlled per backend user group
  • defines AI feature areas checked with FeaturePermissionGate
  • stores records that need tables_select or tables_modify enforcement
Administrators assign the resulting permissions through Backend Users > Groups > Access Lists. The optional T3AF → AI Access / Roles wizard reads the same merged catalogs.

Step 1 — Implement the provider

Implement NITSAN\NsT3AF\Contract\AiAccessCatalogProviderInterface in your extension.

Step 2 — Register the provider

Tag the provider in your extension’s Configuration/Services.yaml.

Step 3 — Gate backend UI and routes

Use FeaturePermissionGate for tabs, cards, and feature areas.
For suite child extensions, use the gate method that matches the module family, such as grantsT3AiTab, grantsT3AaTab, grantsT3CsTab, or grantsT3AaCard. Use RecordAccessEnforcer before mutating records.

Step 4 — Assign permissions

Administrators can assign permissions in two ways. Option A — AI Access / Roles wizard Open T3AF → AI Access / Roles, select a backend group, and configure the wizard steps or permission matrix tabs. Option B — Native backend groups
  1. Grant the custom feature bit under Custom module options → T3Ai.
  2. Grant the backend module under Modules.
  3. Grant tables_select and tables_modify for the relevant tables.

Step 5 — Verify

  • The merged catalog contains your feature and record rows when your extension is loaded.
  • A restricted editor without the feature bit cannot open gated tabs or submit protected actions.
  • A direct POST without tables_modify returns a 403 JSON response from RecordAccessEnforcer.

Reference implementations

  • EXT:ns_t3af_extended/Classes/Access/T3afExtendedAccessCatalogProvider.php
  • EXT:ns_t3ai/Classes/Access/T3AiAccessCatalogProvider.php
  • EXT:ns_t3aa/Classes/Access/T3AaAccessCatalogProvider.php
  • EXT:ns_t3cs/Classes/Access/T3CsAccessCatalogProvider.php
  • EXT:ns_t3as/Classes/Access/T3AsAccessCatalogProvider.php
  • EXT:ns_t3ac/Classes/Access/T3AcAccessCatalogProvider.php

Troubleshooting

Permissions do not appear in the wizard
  • Confirm the provider is tagged with t3af.ai_access_catalog_provider.
  • Confirm isAvailable() returns true.
  • Flush TYPO3 caches so the DI container is rebuilt.
Backend action is still allowed
  • Confirm the route calls FeaturePermissionGate or RecordAccessEnforcer before performing the action.
  • Confirm the catalog id used in the enforcer matches the id returned by the provider.