2013-06-12 11 views
6

मैं जानना चाहता हूं कि उपयोगकर्ता के पास 'VIEW_GEOLOC_DATA' भूमिका है, लेकिन मुझे ट्विग फ़ंक्शन is_granted() का उपयोग करने में कोई समस्या है।ट्विग/सिम्फनी 2: गुणक भूमिकाओं के साथ is_granted

अगर मैं एक टेम्पलेट में उपयोग करें:

array(2) { 
    [0]=> 
    string(16) "ROLE_SUPER_ADMIN" 
    [1]=> 
    string(16) "VIEW_GEOLOC_DATA" 
} 
is_granted('ROLE_SUPER_ADMIN') : bool(true) 
is_granted('VIEW_GEOLOC_DATA') : bool(false) 

मैं अंदर और बाहर प्रवेश करने, सिम्फोनी का कैश खाली करने के लिए कोशिश की है:

Roles : {{ dump(app.user.getRoles()) }} 
is_granted('ROLE_SUPER_ADMIN') : {{ dump(is_granted('ROLE_SUPER_ADMIN')) }} 
is_granted('VIEW_GEOLOC_DATA') : {{ dump(is_granted('VIEW_GEOLOC_DATA')) }} 

यह जब प्रतिपादन मैं क्या मिलता है।
मैं भी सरणी मेरे उपयोगकर्ता) विधि getRoles द्वारा दिया (में भूमिका का क्रम बदलने की कोशिश की: समारोह is_granted केवल खाते में सरणी

उत्तर

8

मैं अपने User कक्षा में एक नई विधि hasRole बना दी:

public function hasRole($role) 
{ 
    return in_array($role, $this->getRoles()); 
} 

फिर, एक टेम्पलेट में, मैं का उपयोग करें:

{% if app.user.hasRole('ROLE_VIEW_GEOLOC_DATA') %} 
    {# do something #} 
{% endif %} 

संपादित करें: के रूप में @ जॉनीस ने कहा, यह संभव हो सकता है कि के साथके साथ काम करने के लिए भूमिकाएं शुरू होनी चाहिए 210 सिम्फनी का कार्य। परीक्षण नहीं किया था।

+6

स्पष्टता के मामले के रूप में शायद if_array के परिणाम को सीधे वापस कर सकता है, अगर कोई और/जोड़ने के बजाय: 'वापसी in_array ($ भूमिका, $ this-> getRoles()); ' –

+1

यह वही बात नहीं है जो ROLE विरासत के लिए खातों के लिए है , जबकि सिर्फ जांच कर रहा है कि उपयोगकर्ता की एक निर्दिष्ट भूमिका है या नहीं – Gamesh

8

की पहली भूमिका ले जाएगा आप को संभालने के लिए Symfony2 उम्मीद कर रहे हैं, तो आपकी भूमिकाएं, तो आपकी भूमिकाओं को "ROLE_" से शुरू करने की आवश्यकता है।

बदलें

'VIEW_GEOLOC_DATA' 

'ROLE_VIEW_GEOLOC_DATA' 
बेशक

लिए, आप अपने config में बदल और नई भूमिका जोड़ने की आवश्यकता होगी।

यदि आप समर्पित भूमिका वर्ग का उपयोग कर रहे हैं, तो यह उत्तर लागू नहीं होता है।

+0

मैं एक भूमिका वर्ग का उपयोग नहीं कर रहा हूँ, इस) getRoles की मेरी परिभाषा (है: 'सार्वजनिक समारोह getRoles() { अगर ($ this-> भूमिका == 100) वापसी सरणी ('ROLE_SUPER_ADMIN', 'VIEW_GEOLOC_DATA'); } ' लेकिन व्यवहार [डाटाबेस में प्रबंधन भूमिकाएं] के समान है (http://symfony.com/doc/2.1/cookbook/security/entity_provider.html#managing-roles-in-the-डेटा) –

+2

'ROLE_' उपसर्ग का उपयोग करने के लिए इसे बदलने का प्रयास करें। सिम्फनी 2 उपसर्ग के बिना भूमिका पसंद नहीं है। दस्तावेज़ों से, "सभी भूमिकाएं ROLE_ उपसर्ग के साथ सिम्फनी 2 द्वारा प्रबंधित की जानी चाहिए।" http://symfony.com/doc/2.1/book/security.html शुभकामनाएँ और अगर यह काम करता है तो मुझे बताएं। – JonnyS

+0

यह कुछ भी नहीं बदलता –

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