namespace MyVendor\MyExt\Access;
use NITSAN\NsT3AF\Access\Dto\FeatureAccessBindingsDescriptor;
use NITSAN\NsT3AF\Access\Dto\FeaturePermissionDescriptor;
use NITSAN\NsT3AF\Access\Dto\ModuleAccessDescriptor;
use NITSAN\NsT3AF\Access\Dto\RecordPermissionDescriptor;
use NITSAN\NsT3AF\Contract\AiAccessCatalogProviderInterface;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
final class MyExtAccessCatalogProvider implements AiAccessCatalogProviderInterface
{
public function isAvailable(): bool
{
return ExtensionManagementUtility::isLoaded('my_ext');
}
public function getExtensionKey(): string
{
return 'my_ext';
}
public function getCatalogModuleKey(): string
{
return 'my_ext';
}
public function getModuleAccess(): ?ModuleAccessDescriptor
{
return new ModuleAccessDescriptor(
label: 'My Extension',
sublabel: 'AI Assistant',
description: 'Short description for the wizard module card.',
color: '#2563eb',
groupMod: 'myvendor_myext_dashboard',
extension: 'my_ext',
);
}
public function getFeaturePermissions(): array
{
return [
new FeaturePermissionDescriptor(
id: 'myFeature',
label: 'My AI Feature',
description: 'Generate content with AI.',
permBase: 'MyExt.Feature',
relevantModules: ['my_ext'],
group: 'my_ext',
extension: 'my_ext',
),
];
}
public function getRecordPermissions(): array
{
return [
new RecordPermissionDescriptor(
id: 'myExtRecords',
label: 'My Records',
tables: ['tx_myext_domain_model_item'],
relevantModules: ['my_ext'],
relevantFeatures: ['myFeature'],
readHelp: 'View records',
writeHelp: 'Create and edit records',
extension: 'my_ext',
),
];
}
public function getFeatureAccessBindings(): FeatureAccessBindingsDescriptor
{
return new FeatureAccessBindingsDescriptor(
moduleKey: 'my_ext',
legacyCardPermPrefix: 'tx_myext_dashboard_',
moduleGroupMod: 'myvendor_myext_',
tabFeatureMap: ['dashboard' => 'MyExt.Feature'],
);
}
}