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 > Backend usergroups > Access Lists. The optional T3AF > AI Permissions 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.
You can take the reference below for the function definition:
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 Permissions wizard Open T3AF > AI Permissions, 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 section).
  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.