我的系统中有两个角色:用户和管理员。默认情况下,当某人以用户或管理员身份登录时,他可以使用 FOSUserBundle 的实现形式修改自己的密码。但是我想禁止用户更改自己的密码,必须向管理员请求,所以管理员会重置它,要么引入管理员选择的新密码,要么生成随机密码。我还想向用户发送一封电子邮件,告诉他他的密码已更改,从现在开始他必须使用新密码。但我找不到如何做到这一点。有什么帮助吗?
问问题
12603 次
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
。
然后,您需要创建一个安全的控制器操作,允许管理员更改密码并发送电子邮件。为此,您可以使用 FOSUserBundleUserManager
及其setPlainPassword()
方法。
看一下文档:
于 2013-02-23T18:09:22.507 回答