2015-03-19 78 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() 
     ) 
    ); 
} 

我相信你可以通過設置選項調整此添加更多的角色,如果你想,像選擇字段上的「多個」變爲「真實」。

我希望我能幫助有同樣問題的人!

相關問題