2013-06-12 20 views
6

Bir kullanıcının 'VIEW_GEOLOC_DATA' rolüne sahip olup olmadığını bilmek istiyorum, ancak is_granted() dal işlevini kullanırken bir sorun yaşıyorum.Twig/Symfony2: is_granted ile katları roller

Bir şablonda kullanıyorsanız:

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) 

Ben Symfony'nin önbellek boşaltma, giriş ve çıkış yaptıktan denedim:

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')) }} 

Bu işlerken ne alıyorum.
Ben de Kullanıcı) (yöntem getRoles tarafından döndürülen dizide rolleri sıralamasını değiştirmek için çalıştı: is_granted işlev yalnızca işlemek için Symfony2'ye bekliyoruz dikkate dizinin

cevap

8

benim User sınıfında yeni bir yöntem hasRole oluşturarak sona erdi

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

DÜZENLEME: gibi @ JonnyS,ile çalışmak için rollerin ROLE_ ile başlaması gerektiğini söyledi. 210 Symfony'nin işlevi. Test edilmedi.

+6

, açıklık meselesi olarak, if/else: 'return in_array ($ role, $ this-> getRoles()) eklemek yerine, doğrudan in_array sonucunu döndürür; –

+1

Aynı şey ROLE devralma hesaplarına aittir. Sadece kullanıcı belirli bir role sahip olup olmadığını kontrol ederken – Gamesh

8

ilk rolünü alacak rollerin, sonra rollerin "ROLE_" ile başlamalıdır.

Değişim

'VIEW_GEOLOC_DATA' 

Tabii
'ROLE_VIEW_GEOLOC_DATA' 

için, kendi config Bunu değiştirmek ve yeni rol eklemek gerekir.

Özel bir Rol sınıfı kullanıyorsanız, bu cevap geçerli değildir. Bir şablonda, kullandığım,

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

Sonra:

+0

, bu getRoles benim tanımı() 'dir: 'kamu fonksiyon getRoles() { if ($ this-> rol == 100) dönüş dizisi ('ROLE_SUPER_ADMIN', 'VIEW_GEOLOC_DATA'); } ' Ancak davranış, [Veritabanındaki Rolleri Yönetme] ile aynıdır (http://symfony.com/doc/2.1/cookbook/security/entity_provider.html#managing-roles-in-the-database) –

+2

'ROLE_' önekini kullanmak için değiştirmeyi deneyin. Symfony 2, önek olmadan rolleri sevmez. Dokümanlardan "Tüm roller, Symfony2 tarafından yönetilmek üzere ROLE_ öneki ile başlamalıdır." http://symfony.com/doc/2.1/book/security.html İyi Şanslar ve işe yararsa haberim olsun. – JonnyS

+0

Hiçbir şey değiştirmez –

İlgili konular