feat(core) : aggregate module permissions and add sync-permissions command

This commit is contained in:
Matthieu
2026-06-19 17:00:14 +02:00
parent ffed224979
commit ac662e701b
5 changed files with 175 additions and 4 deletions
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Shared\Domain\Module;
use InvalidArgumentException;
final class ModuleRegistry
{
/**
@@ -22,4 +24,29 @@ final class ModuleRegistry
return $ids;
}
/**
* @param list<class-string> $moduleClasses
*
* @return list<array{code: string, label: string, module: string}>
*/
public static function permissions(array $moduleClasses): array
{
$out = [];
foreach ($moduleClasses as $moduleClass) {
if (!is_a($moduleClass, ModuleInterface::class, true)) {
continue;
}
$moduleId = $moduleClass::id();
foreach ($moduleClass::permissions() as $perm) {
$code = $perm['code'];
if (!str_starts_with($code, $moduleId.'.')) {
throw new InvalidArgumentException(sprintf('Permission "%s" du module "%s" doit être préfixée par "%s.".', $code, $moduleId, $moduleId));
}
$out[] = ['code' => $code, 'label' => $perm['label'], 'module' => $moduleId];
}
}
return $out;
}
}