@vasx3

Как добавить первичного администратора в Symfony?

Подскажите, как в Symfony 5 добавить первичного администратора?
Как управлять пользователями когда администратор уже есть понятно, но как его добавить?
В security.yaml?
Пробовал задавать в провайдере in_memory, но там даёт задать только 2 параметра: пароль и роль, а у меня больше обязательных полей. Да и не уверен, что это достаточно безопасно хранить доступы в коде.
Через фикстуры?
Так вроде рекомендуется использовать только для дева.

Как лучше всего, просветите начинающего
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Если используется FOSUserBundle, то надо использовать команду
bin/console fos:user:create username em@ai.il 'p@55w0rd'
.

В случае своего решения, эта команду надо создать самому. У меня она выглядит как-то так (по сути повторяет код экшена контроллера со своими нюансами)

CreateCommand

/**
 * @psalm-suppress PropertyNotSetInConstructor
 */
class CreateCommand extends AbstractCommand
{
    private DocumentManager $documentManager;
    private ValidatorInterface $validator;
    private PasswordGenerator $passwordGenerator;
    private AdministratorMapper $mapper;

    public function __construct(
        DocumentManager $documentManager,
        ValidatorInterface $validator,
        PasswordGenerator $passwordGenerator,
        AdministratorMapper $mapper
    ) {
        parent::__construct();

        $this->documentManager = $documentManager;
        $this->validator = $validator;
        $this->passwordGenerator = $passwordGenerator;
        $this->mapper = $mapper;
    }

    /**
     * @psalm-suppress MissingReturnType
     */
    protected function configure()
    {
        $this
            ->setName('app:administrator:create')
            ->addArgument('username', InputArgument::REQUIRED, 'Username')
            ->addOption('password', 'p', InputOption::VALUE_REQUIRED, 'Password')
            ->setDescription('Creates administrator')
        ;
    }
    
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        /** @var string $username */
        $username = $input->getArgument('username');
        /** @var string|null $plainPassword */
        $plainPassword = $input->getOption('password');
        if (!$plainPassword) {
            $plainPassword = $this->passwordGenerator->generate();
        }

        $model = new AdministratorModel();
        $model->enabled = true;
        $model->username = $username;
        $model->password = $plainPassword;

        $errors = $this->validator->validate($model);
        if (\count($errors) > 0) {
            $this->io->error('Can\'t create administrator');
            $this->printConstraintViolations($errors);

            return 1;
        }

        $administrator = $this->mapper->map($model);

        $this->documentManager->persist($administrator);
        $this->documentManager->flush();

        $this->io->writeln(sprintf('Administrator <info>%s</info> with password <info>%s</info> has been created', $administrator->getUsername(), $plainPassword));

        return 0;
    }
}



bin/console app:administrator:create vasx3

Создавать пользователей, а тем более администраторов, через миграции и фикстуры - риск, т.к. в случае утечки кода все эти данные будут доступны третьим лицам
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@golentor
В консоли
php bin/console make:auth
php bin/console make:user

Далее следуйте инструкциям.
https://symfony.com/doc/master/security.html

Неблагодарите.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы