diff --git a/config/modules.php b/config/modules.php index 449543e..c4f8f54 100644 --- a/config/modules.php +++ b/config/modules.php @@ -1,6 +1,7 @@ 'sites', 'permission' => 'sites.view', ], + [ + 'label' => 'sidebar.catalog.categories', + 'to' => '/admin/categories', + 'icon' => 'mdi:tag-multiple-outline', + 'module' => 'catalog', + 'permission' => 'catalog.categories.view', + ], [ 'label' => 'sidebar.core.audit_log', 'to' => '/admin/audit-log', diff --git a/frontend/i18n/locales/fr.json b/frontend/i18n/locales/fr.json index 4d08443..1c9e5cd 100644 --- a/frontend/i18n/locales/fr.json +++ b/frontend/i18n/locales/fr.json @@ -32,6 +32,9 @@ }, "sites": { "admin": "Sites" + }, + "catalog": { + "categories": "Gestion des catégories" } }, "dashboard": { diff --git a/frontend/tests/e2e/_fixtures/personas.ts b/frontend/tests/e2e/_fixtures/personas.ts index 22cd8a4..43d4bba 100644 --- a/frontend/tests/e2e/_fixtures/personas.ts +++ b/frontend/tests/e2e/_fixtures/personas.ts @@ -35,7 +35,7 @@ export interface Persona { // sidebar-visibility pour driver la matrice. Les valeurs correspondent // aux slugs de route (`/admin/`), volontairement stables quand // la copie/i18n change. - expectedAdminLinks: Array<'users' | 'roles' | 'sites' | 'audit-log'> + expectedAdminLinks: Array<'users' | 'roles' | 'sites' | 'audit-log' | 'categories'> } const SHARED_PASSWORD = 'e2e-secret' @@ -47,7 +47,7 @@ export const personas: Record = { password: SHARED_PASSWORD, isAdmin: true, permissions: [], - expectedAdminLinks: ['users', 'roles', 'sites', 'audit-log'], + expectedAdminLinks: ['users', 'roles', 'sites', 'categories', 'audit-log'], }, 'user-full': { key: 'user-full', @@ -63,8 +63,10 @@ export const personas: Record = { 'sites.view', 'sites.manage', 'sites.bypass_scope', + 'catalog.categories.view', + 'catalog.categories.manage', ], - expectedAdminLinks: ['users', 'roles', 'sites', 'audit-log'], + expectedAdminLinks: ['users', 'roles', 'sites', 'categories', 'audit-log'], }, 'user-readonly': { key: 'user-readonly', @@ -109,4 +111,4 @@ export function getPersona(key: PersonaKey): Persona { return personas[key] } -export const ALL_ADMIN_LINKS = ['users', 'roles', 'sites', 'audit-log'] as const +export const ALL_ADMIN_LINKS = ['users', 'roles', 'sites', 'categories', 'audit-log'] as const diff --git a/src/Module/Catalog/CatalogModule.php b/src/Module/Catalog/CatalogModule.php new file mode 100644 index 0000000..1bae95f --- /dev/null +++ b/src/Module/Catalog/CatalogModule.php @@ -0,0 +1,43 @@ + + */ + public static function permissions(): array + { + return [ + ['code' => 'catalog.categories.view', 'label' => 'Voir les categories'], + ['code' => 'catalog.categories.manage', 'label' => 'Gerer les categories (creer, editer, supprimer)'], + ]; + } +} diff --git a/src/Module/Core/Infrastructure/Console/SeedE2ECommand.php b/src/Module/Core/Infrastructure/Console/SeedE2ECommand.php index c9bcbb9..115f5d6 100644 --- a/src/Module/Core/Infrastructure/Console/SeedE2ECommand.php +++ b/src/Module/Core/Infrastructure/Console/SeedE2ECommand.php @@ -184,6 +184,8 @@ final class SeedE2ECommand extends Command 'sites.view', 'sites.manage', 'sites.bypass_scope', + 'catalog.categories.view', + 'catalog.categories.manage', ], ], [