2015-03-19 104 views
1

我已经使用自制的LDAP控制器完全设置了FOSUserBundle,该控制器允许用户使用他们已经存在的Active Directory登录进行登录。从管理面板(Symfony2和FOSUserBundle)编辑用户角色

我想要的是允许管理员从后端编辑任何用户角色。任何想法我可以做到这一点? (我不想使用SonataBundle)。

我已经取得的FormType:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $permissions = array(
     'ROLE_USER'  => 'Aucun droit', 
     'ROLE_CONSULT'  => 'Consultation', 
     'ROLE_SUPER_ADMIN' => 'Administrateur' 
    ); 

    $builder 
     ->add(
      'id', 
      'entity', 
      array(
       'class' => 'MainBundle:Users', 
       'property' => 'displayName', 
       'label' => 'Choisir l\'utilisateur', 
       'attr'  => array(
        'class' => "select2" 
       ) 
      ) 
     ) 
     ->add(
      'role', 
      'choice', 
      array(
       'label' => 'Rôle à attribuer', 
       'choices' => $permissions, 
       'attr' => array(
        'class' => "select2" 
       ) 
      ) 
     ) 
     ->add(
      'save', 
      'submit', 
      array(
       'label' => 'Sauvegarder', 
       'attr' => array(
        'class' => 'btn' 
       ) 
      ) 
     ); 
} 

和控制器,这是我真的不知道,因为我不知道什么时候选择指定的用户编辑:

public function editUserAction(Request $request) 
{ 
    $request = $this->container->get('request'); 

    $editUser = $this->getDoctrine()->getRepository('MainBundle:Users')->findAll(); 

    $formEditUser = $this->createForm(new ChangeUserRoleType(), $editUser); 
    $formEditUser->handleRequest($request); 
    if ($formEditUser->isValid()) { 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($editUser); 
     $em->flush(); 

     return $this->render(
      'ReportingAdminBundle:Admin:index.html.twig', 
      array(
       'editUserForm' => $formEditUser->createView() 
      ) 
     ); 
    } 

    return $this->render(
     'ReportingAdminBundle:Admin:index.html.twig', 
     array(
      'editUserForm' => $formEditUser->createView() 
     ) 
    ); 
} 
+0

首先在你的代码中,$ editUser包含的是集合而不是一个特定的用户,你应该使用 - > find($ id),并且$ id应该在请求的参数 – 2015-03-19 11:09:58

+0

是的,这就是我的想法。但是,我怎么用一种形式做到这一点?有什么办法吗? – Anthony 2015-03-19 11:12:51

回答

1

好吧,我解决了这个问题。

形式的BuildForm:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $permissions = array(
     'ROLE_USER'  => 'First role', 
     'ROLE_CONSULT'  => 'Second role', 
     'ROLE_SUPER_ADMIN' => 'Third role' 
    ); 

    $builder 
     ->add(
      'id', 
      'entity', 
      array(
       'class' => 'MainBundle:Users', 
       'property' => 'displayName', 
       'label' => 'Choose the user', 
      ) 
     ) 
     ->add(
      'role', 
      'choice', 
      array(
       'label' => 'Choose the role', 
       'choices' => $permissions, 
      ) 
     ) 
     ->add(
      'save', 
      'submit' 
     ); 
} 

控制器上的功能:

public function editRoleAction(Request $request) 
{ 
    $request = $this->container->get('request'); 

    $formEditUser = $this->createForm(new ChangeUserRoleType()); 
    $formEditUser->handleRequest($request); 
    if ($formEditUser->isValid()) { 

     // Getting the variable of the form 
     $selectedUser = $request->request->get('value'); 
     // Getting the user infos 
     $editUser = $this->getDoctrine()->getRepository('MainBundle:Users')->find($selectedUser); 
     // Using the UserManager (from the FOSUserBundle) 
     $userManager = $this->container->get('fos_user.user_manager'); 
     $user = $userManager->findUserByUsername($editUser->getUsername()); 
     // Changing the role of the user 
     $user->setRoles(array($selectedUser['role'])); 
     // Updating the user 
     $userManager->updateUser($user); 
    } 

    return $this->render(
     'ReportingAdminBundle:Admin:index.html.twig', 
     array(
      'editUserForm' => $formEditUser->createView() 
     ) 
    ); 
} 

我相信你可以通过设置选项调整此添加更多的角色,如果你想,像选择字段上的“多个”变为“真实”。

我希望我能帮助有同样问题的人!

相关问题