2012-08-17 20 views
15

में पर्चा बिल्डर कक्षा में उपयोगकर्ता भूमिका का उपयोग कर सकते मैं इसकैसे मैं Symfony2

->add('description') 
    ->add('createdAt') 

की तरह क्षेत्र के साथ UserType के रूप में फार्म का अब मैं चाहता हूँ कि अगर प्रवेश प्रयोक्ता भूमिका (ROLE_SUPERADMIN) है तो वह अतिरिक्त देख सकते हैं इस

->add('description') 
if($user.hasRole(ROLE_SUPERADMIN)) 
->add('createdAt') 

वास्तव में मुझे कई क्षेत्रों के लिए ऐसा करना है। वहाँ जो

->add('createdAt',"MyCustomType")

उत्तर

25

सुंदर सरल की तरह किसी भी तरह से मैं कुछ कस्टम प्रकार कर सकते हैं ताकि यदि उस प्रकार है वहाँ तो केवल व्यवस्थापक देख सकते है।

use Symfony\Component\Security\Core\SecurityContext; 

class UserType extends AbstractType 
{ 

    private $securityContext; 

    public function __construct(SecurityContext $securityContext) 
    { 
     $this->securityContext = $securityContext; 
    } 

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     // Current logged user 
     $user = $this->securityContext->getToken()->getUser(); 

     // Add fields to the builder 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'required' => false, 
      'data_class' => 'Acme\HelloBundle\Entity\User' 
     ); 
    } 

    public function getName() 
    { 
     return 'user_type'; 
    } 
} 

तब विशेष टैग form.type साथ, एक सेवा के रूप वर्ग का प्रतीक::

services: 
    form.type.user: 
     class: Acme\HelloBundle\Form\Type\UserType 
     arguments: ["@security.context"] 
     tags: 
      - { name: form.type, alias: user_type } 

अपने नियंत्रक में, बजाय कर रही है बस अपने कस्टम प्रपत्र, एक सेवा टाइप सुरक्षा संदर्भ के आधार पर कर new UserType(), कंटेनर से सेवा grap: sf2.6 के बाद [ "@ security.authorization_checker"]:

$form = $this->createForm($this->get('form.type.user'), $data); 
+0

धन्यवाद साथी, मैं कोशिश करेंगे कि – user825904

+0

तर्क http://stackoverflow.com/questions/31221477/symfony2-check-user-role-in- सेवा – Harold