2

私のシステムには、ユーザーと管理者という 2 つの役割があります。デフォルトでは、誰かがユーザーまたは管理者としてログインすると、実装された形式の FOSUserBundle を使用して自分のパスワードを変更できます。しかし、ユーザーが自分のパスワードを変更して管理者に要求することを禁止したいので、管理者はそれをリセットし、管理者が選択した新しいパスワードを導入するか、ランダムなパスワードを生成します。また、パスワードが変更されたため、今後は新しいパスワードを使用する必要があることを知らせるメールをユーザーに送信したいと思います。しかし、私はそれを行う方法を見つけることができません。何か助けはありますか?

4

2 に答える 2

4

管理者に別のユーザーのパスワードを変更してもらいたい場合は、独自のフォームを使用できます。

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username',               TextType::class, array(
                                                    'required' => true,
                                                    'label' => "Username "
                                                    ))
            ->add('email',                  TextType::class, array(
                                                    'required' => true,
                                                    'label' => "Adresse email "
                                                    ))
            ->add('plainPassword',          RepeatedType::class, array(
                                                    'type' => PasswordType::class,
                                                    'options' => array('translation_domain' => 'FOSUserBundle'),
                                                    'first_options' => array('label' => 'form.password'),
                                                    'second_options' => array('label' => 'form.password_confirmation'),
                                                    'invalid_message' => 'fos_user.password.mismatch',
                                                    ))
            ->add('roles',                  ChoiceType::class, array(
                                                    'required' => true,
                                                    'choices' => array('Salarié' => 'ROLE_SALARIE', 'Admin' => 'ROLE_ADMIN'),
                                                    'multiple' => true,
                                                    'expanded'=>true,
                                                    'label' => "Rôle ",
                                                    'label_attr' => array('class' => 'checkbox-inline')
                                                    ))
        ;
    }

//...

そして、コントローラーで:

public function updateAction(Request $request, Member $user)
{
    $em = $this->getDoctrine()->getManager();

    $form = $this->createEditForm($user);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $userManager = $this->container->get('fos_user.user_manager');
        $userManager->updatePassword($user);
        $em->flush();
于 2016-05-07T12:01:52.050 に答える
2

fos_user_change_passwordファイル内のおよびfos_user_resettingルートを削除することで、ユーザーがパスワードを変更できないようにすることができapp/config/routing.ymlます。この方法では、ユーザーも管理者もページから自分のパスワードを変更できなくなり/profileます。

次に、管理者がパスワードを変更して電子メールを送信できるようにする、保護されたコントローラー アクションを作成する必要があります。UserManagerこれを行うには、FOSUserBundleとそのsetPlainPassword()メソッドを使用できます。

ドキュメントを見てください:

Symfony2 セキュリティ

FOSUserBundle ユーザーマネージャー

メールの送信方法

于 2013-02-23T18:09:22.507 に答える