1717use Symfony \Component \HttpFoundation \Response ;
1818use Symfony \Component \HttpKernel \DataCollector \DataCollector ;
1919use Symfony \Component \Security \Core \Role \RoleInterface ;
20+ use Symfony \Component \Security \Http \Logout \LogoutUrlGenerator ;
2021
2122/**
2223 * SecurityDataCollector.
@@ -27,17 +28,20 @@ class SecurityDataCollector extends DataCollector
2728{
2829 private $ tokenStorage ;
2930 private $ roleHierarchy ;
31+ private $ logoutUrlGenerator ;
3032
3133 /**
3234 * Constructor.
3335 *
3436 * @param TokenStorageInterface|null $tokenStorage
3537 * @param RoleHierarchyInterface|null $roleHierarchy
38+ * @param LogoutUrlGenerator|null $logoutUrlGenerator
3639 */
37- public function __construct (TokenStorageInterface $ tokenStorage = null , RoleHierarchyInterface $ roleHierarchy = null )
40+ public function __construct (TokenStorageInterface $ tokenStorage = null , RoleHierarchyInterface $ roleHierarchy = null , LogoutUrlGenerator $ logoutUrlGenerator = null )
3841 {
3942 $ this ->tokenStorage = $ tokenStorage ;
4043 $ this ->roleHierarchy = $ roleHierarchy ;
44+ $ this ->logoutUrlGenerator = $ logoutUrlGenerator ;
4145 }
4246
4347 /**
@@ -50,7 +54,7 @@ public function collect(Request $request, Response $response, \Exception $except
5054 'enabled ' => false ,
5155 'authenticated ' => false ,
5256 'token_class ' => null ,
53- 'provider_key ' => null ,
57+ 'logout_url ' => null ,
5458 'user ' => '' ,
5559 'roles ' => array (),
5660 'inherited_roles ' => array (),
@@ -61,7 +65,7 @@ public function collect(Request $request, Response $response, \Exception $except
6165 'enabled ' => true ,
6266 'authenticated ' => false ,
6367 'token_class ' => null ,
64- 'provider_key ' => null ,
68+ 'logout_url ' => null ,
6569 'user ' => '' ,
6670 'roles ' => array (),
6771 'inherited_roles ' => array (),
@@ -70,6 +74,7 @@ public function collect(Request $request, Response $response, \Exception $except
7074 } else {
7175 $ inheritedRoles = array ();
7276 $ assignedRoles = $ token ->getRoles ();
77+
7378 if (null !== $ this ->roleHierarchy ) {
7479 $ allRoles = $ this ->roleHierarchy ->getReachableRoles ($ assignedRoles );
7580 foreach ($ allRoles as $ role ) {
@@ -78,11 +83,21 @@ public function collect(Request $request, Response $response, \Exception $except
7883 }
7984 }
8085 }
86+
87+ $ logoutUrl = null ;
88+ try {
89+ if (null !== $ this ->logoutUrlGenerator ) {
90+ $ logoutUrl = $ this ->logoutUrlGenerator ->getLogoutPath ();
91+ }
92+ } catch (\Exception $ e ) {
93+ // fail silently when the logout URL cannot be generated
94+ }
95+
8196 $ this ->data = array (
8297 'enabled ' => true ,
8398 'authenticated ' => $ token ->isAuthenticated (),
8499 'token_class ' => get_class ($ token ),
85- 'provider_key ' => method_exists ( $ token , ' getProviderKey ' ) ? $ token -> getProviderKey () : null ,
100+ 'logout_url ' => $ logoutUrl ,
86101 'user ' => $ token ->getUsername (),
87102 'roles ' => array_map (function (RoleInterface $ role ) { return $ role ->getRole ();}, $ assignedRoles ),
88103 'inherited_roles ' => array_map (function (RoleInterface $ role ) { return $ role ->getRole (); }, $ inheritedRoles ),
@@ -167,9 +182,9 @@ public function getTokenClass()
167182 *
168183 * @return string The provider key
169184 */
170- public function getProviderKey ()
185+ public function getLogoutUrl ()
171186 {
172- return $ this ->data ['provider_key ' ];
187+ return $ this ->data ['logout_url ' ];
173188 }
174189
175190 /**
0 commit comments