मैं यह सत्यापित करने में सक्षम होना चाहता हूं कि Symfony2 में UserInterface
लागू करने वाली किसी भी मनमानी वस्तु को गुण (भूमिकाएं) दी गई हैं या नहीं। क्या यह संभव है?मनमानी उपयोगकर्ताओं के प्रमाणीकरण के लिए Symfony2 में AccessDecisionManager का उपयोग कैसे करें?
UserInterface->getRoles()
मेरी ज़रूरतों के लिए उपयुक्त नहीं है क्योंकि यह भूमिका में पदानुक्रम नहीं लेता है, और मैं उस विभाग में पहिया को फिर से नहीं खोलूंगा, इसलिए मैं संभवतः एक्सेस निर्णय प्रबंधक का उपयोग करना चाहता हूं ।
धन्यवाद।
आप isGranted विधि के साथ security.context सेवा का उपयोग कर सकते हैं:
नीचे ओलिवियर के समाधान के जवाब में, यहां मेरा अनुभव है। आप एक दूसरी तर्क पारित कर सकते हैं जो आपकी वस्तु है।
$user = new Core\Model\User();
var_dump($user->getRoles(), $this->get('security.context')->isGranted('ROLE_ADMIN', $user));
आउटपुट:
array (size=1)
0 => string 'ROLE_USER' (length=9)
boolean true
मेरी भूमिका पदानुक्रम:
role_hierarchy:
ROLE_USER: ~
ROLE_VERIFIED_USER: [ROLE_USER]
ROLE_ADMIN: [ROLE_VERIFIED_USER]
ROLE_SUPERADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
ROLE_ALLOWED_TO_SWITCH: ~
मेरे UserInterface->getRoles()
विधि:
public function getRoles()
{
$roles = [$this->isVerified() ? 'ROLE_VERIFIED_USER' : 'ROLE_USER'];
/**
* @var UserSecurityRole $userSecurityRole
*/
foreach ($this->getUserSecurityRoles() as $userSecurityRole) {
$roles[] = $userSecurityRole->getRole();
}
return $roles;
}
ROLE_ADMIN
स्पष्ट रूप से सौंपा जाना चाहिए, फिर भी isGranted('ROLE_ADMIN', $user)
रिटर्न TRUE
उपयोगकर्ता सिर्फ बनाया गया था और डिफ़ॉल्ट ROLE_USER
, जब तक वर्तमान में उपयोगकर्ता के लॉग इन के अलावा अन्य किसी भी भूमिकाएं असाइन नहीं किया गया है, भले ही ROLE_ADMIN
दी जाती है। इससे मेरा मानना है कि दूसरे तर्क को isGranted()
पर नजरअंदाज कर दिया गया है और Token
AccessDecisionManager->decide()
को SecurityContext
द्वारा प्रदान किया जाता है।
यदि यह एक बग है तो मैं एक रिपोर्ट सबमिट करूंगा, लेकिन शायद मैं अभी भी कुछ गलत कर रहा हूं?
सिमफोनी 2.3 –