2012-09-25 15 views
5

Uygulamamdaki rolleri test ederken, SecurityContext'un isGranted işlevini buldum. Bu harika çalışıyor ama şimdi geçerli kullanıcı olmayan bir kullanıcının rollerini kontrol etmem gerekiyor yani isGranted benim için çalışmıyor.Symfony2'deGranted için alternatifler

Bakıyorum ve kullanıcının hasRole işlevini buldum, sorun, bu işlevin Symfony'nin hiyerarşi ağacında görünmemesi ve kullanıcıya atanan rollerin yalnızca görünmesidir.

Geçerli kullanıcı için isGranted gibi hiyerarşi ağacında görünen bir kullanıcının rolünü arayan bir işlev var mı? Onu hayata ve sorun ContainerBuilder ihtiyacı vardır ve ben farklı bir yaklaşım tercih ediyorum yani çalışır

How to use the AccessDecisionManager in Symfony2 for authorization of arbitrary users?

:

DÜZENLEME Bu çözüm buldu.

Fikriniz Var mı?

+0

Kişisel rolleri veritabanınızda stoklanmış olmalıdır); muhtemelen BTW hasRole

belki sen yapmak istiyorsun düşünmek gerekir, çoğu zaman yeterli olmalıdır Bir cadı bağlı farklı bir kullanıcı rolü bağlı (üzgünüm, bunun için bir yöntem olup olmadığını bilmiyorum, sorununuzu çözmek için başka bir fikir) – Snroki

+1

Kullanım durumu nedir? –

+1

Kullanıcılarımın bir listesi var ve uygulanabilecek eylemlerin değişkenlerine bağlı olarak – graffiacane

cevap

0

Temel olarak AFAIK SecurityContext, getUser yöntemini kullanarak geçerli kullanıcıyı nereden alabildiğinden ile çalışır. denilen seçmen kullanıcı belirteci temelde nesneleri seçmen üzerinde yineleme ve bunları çağırmak (ve bunun için farklı stratejiler kullanabilirsiniz) AccessDecisionManager denilen ardından isGranted çalışırken kimlik doğrulaması kullanıcı belirteci ilk ve ardından kullanmak sınıfı kimlik doğrulaması yapılmamışsa

Bir Symfony\Component\Security\Core\Role\RoleHierarchy kullanmak RoleHierarchyVoter olduğunu . Sadece fark (O diğer kullanıcılar için isGranted gibi böyle bir işlevi olduğunu düşünüyorum

(veya herhangi bilmem), ancak security.role_hierarchy kullanarak bu izin kendi hizmetini yazabilirsiniz:

Yani sorunuza cevap bu özel hizmettir). Sadece almak için bir istek yapabilirsiniz

+1

Merhaba l3l0, işlev hasRole yeterli değil çünkü hiyerarşi ağacına bakmam gerekiyor. – graffiacane

+0

FOSUserBundle'ı kullandığınız Hello @graffiacaneif'in tüm kullanıcı rollerini döndürmesi gereken getRoles gibi bir yönteme sahipsiniz. Bkz. Https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/User.php#L312 ve Model/Kullanıcı :: hasRole bununla birlikte çalışmalıyım – l3l0

+0

Merhaba l3L0, belki iyi açıklamıyorum, ancak bu işlevler bir kullanıcının hiyerarşi ağacından miras aldığı rolleri döndürmez, yalnızca veritabanındaki kullanıcıyla ilişkilendirilmiş olanlardır. – graffiacane