2013-10-30 5 views
5

मैं सिम्फनी और "सुपर एडमिन" के बारे में कुछ समझने की कोशिश कर रहा हूं।सिम्फनी - सुपर व्यवस्थापक को समझना

जब मैं सुपर व्यवस्थापक विशेषाधिकारों

php app/console fos:user:create adminuser --super-admin 

साथ FOSUser to create a user का उपयोग मैं सबसे पहले पता है कि (doc से)

[...] --super- निर्दिष्ट मतलब है करना चाहते हैं व्यवस्थापक विकल्प उपयोगकर्ता को एक सुपर व्यवस्थापक के रूप में ध्वजांकित करेगा [...]

मुझे लगता है कि इसका मतलब है उपयोगकर्ता को ROLE_SUPER_ADMIN देना क्योंकि मुझे कोई सुपर-एडमिन नहीं दिख रहा है उपयोगकर्ता तालिका में फ़ील्ड।

दूसरे, जबकि (अब भी दस्तावेज़ से)

एक सुपर व्यवस्थापक आपके आवेदन के किसी भी भाग की पहुंच है

security: 
    role_hierarchy: 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ...] 

क्यों हम अभी भी के लिए पहुँच पदानुक्रम विन्यस्त करने की जरूरत है यह

उत्तर

4

FOSUserBundle के कोड को देखते हुए आप पाएंगे कि CreateUserCommand अगर --super-admin ध्वज के साथ लागू एक बूलियन तर्क $superadmin=true साथ UserManipulator कॉल करेंगे।

अब उपयोगकर्ता मैनिपुलेटर UserManager पर कॉल करता है जो उपयोगकर्ता ऑब्जेक्ट बनाएगा, इसे setSuperAdmin() विधि पर कॉल करें और बाद में नए उपयोगकर्ता को जारी रखें।

विधि इस प्रकार है:

public function setSuperAdmin($boolean) 
{ 
    if (true === $boolean) { 
     $this->addRole(static::ROLE_SUPER_ADMIN); 
    } else { 
     $this->removeRole(static::ROLE_SUPER_ADMIN); 
    } 

    return $this; 
} 

तो अपने पहले सवाल का जवाब:

हाँ, --super-admin झंडा FOSUserBundle का कारण बनता है ROLE_SUPER_ADMIN भूमिका के साथ एक नया उपयोगकर्ता बनाने के लिए।

आपको अभी भी अपनी सुरक्षा कॉन्फ़िगरेशन में भूमिका पदानुक्रम शामिल करना होगा क्योंकि ROLE_SUPER_ADMIN भूमिका मूल रूप से किसी भी अन्य भूमिका से अलग नहीं है।

यह सिर्फ एक सम्मेलनprovided by the Symfony standard edition उस भूमिका ROLE_SUPER_ADMIN के साथ उपयोगकर्ताओं को किसी भी उपयोग प्रतिबंध नहीं होना चाहिए है।

आप ROLE_SUPER_ADMIN डिफ़ॉल्ट रूप से सभी सुरक्षा मतदाताओं को बायपास करना चाहते हैं - जो विशेष भूमिका ROLE_IDDQD के लिए इस लागू करता JMSSecurityExtraBundle के IddqdVoter पर एक नजर है। लेकिन यह आपके अन्य प्रश्न here में पहले से ही सुझाव दिया गया है।

+0

ठीक है, मैंने सोचा, मैंने सोचा था कि यह केवल मतदाताओं से संबंधित था और मैं मत भूल गया मतदाताओं को हमेशा बुलाया जाता है। मैंने यह भी सोचा कि यह Django में बनाया गया था, जिसमें superusers स्वचालित रूप से सभी अधिकार हैं। मैं ऐसी परिस्थिति की कल्पना नहीं कर सकता जहां हम सुपरसर्स से कुछ छिपाना चाहते हैं। –

1

पदानुक्रम परिभाषित करके, आप स्पष्ट रूप से इसे ROLE_ADMIN अनुदान और ROLE_ALLOWED_TO_SWITCH भूमिकाओं (या अन्य कस्टम भूमिकाएं आप हो सकता था)

आप इस लाइन टिप्पणी है, और आप के साथ एक कार्रवाई करने के लिए अपने ROLE_SUPER_ADMIN उपयोगकर्ता के साथ तक पहुँचने का प्रयास एक ROLE_ADMIN चेक, आपको एक अनुमत त्रुटि नहीं मिलेगी।

ROLE_SUPER_ADMIN सुपर प्रशासक भूमिका के नाम के लिए सिर्फ एक सम्मेलन है, लेकिन इसके पास विशेषाधिकार नहीं हैं, आपको उन्हें स्पष्ट रूप से प्रदान करना होगा।

+0

क्या आपने अभी मेरे उत्तर के सम्मेलन भाग की प्रतिलिपि बनाई है? :) – nifr

+0

हाहा, नहीं, हम एक ही समय में बड़े थे :) मुझे लगता है कि यह सिम्फनी 2 में भूमिकाओं को समझने पर यह स्पष्ट जवाब है। लेकिन मैंने पूरे सिम्फनी में सम्मेलन की ओर इशारा किया, न केवल FOSUserBundle – jmoreno

+0

में इस सरल उत्तर के लिए धन्यवाद। –

संबंधित मुद्दे