feat(core) : aggregate module permissions and add sync-permissions command
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user