17
17
use Symfony \Component \HttpFoundation \Response ;
18
18
use Symfony \Component \HttpKernel \DataCollector \DataCollector ;
19
19
use Symfony \Component \Security \Core \Role \RoleInterface ;
20
+ use Symfony \Component \Security \Http \Logout \LogoutUrlGenerator ;
20
21
21
22
/**
22
23
* SecurityDataCollector.
@@ -27,17 +28,20 @@ class SecurityDataCollector extends DataCollector
27
28
{
28
29
private $ tokenStorage ;
29
30
private $ roleHierarchy ;
31
+ private $ logoutUrlGenerator ;
30
32
31
33
/**
32
34
* Constructor.
33
35
*
34
36
* @param TokenStorageInterface|null $tokenStorage
35
37
* @param RoleHierarchyInterface|null $roleHierarchy
38
+ * @param LogoutUrlGenerator|null $logoutUrlGenerator
36
39
*/
37
- public function __construct (TokenStorageInterface $ tokenStorage = null , RoleHierarchyInterface $ roleHierarchy = null )
40
+ public function __construct (TokenStorageInterface $ tokenStorage = null , RoleHierarchyInterface $ roleHierarchy = null , LogoutUrlGenerator $ logoutUrlGenerator = null )
38
41
{
39
42
$ this ->tokenStorage = $ tokenStorage ;
40
43
$ this ->roleHierarchy = $ roleHierarchy ;
44
+ $ this ->logoutUrlGenerator = $ logoutUrlGenerator ;
41
45
}
42
46
43
47
/**
@@ -50,7 +54,7 @@ public function collect(Request $request, Response $response, \Exception $except
50
54
'enabled ' => false ,
51
55
'authenticated ' => false ,
52
56
'token_class ' => null ,
53
- 'provider_key ' => null ,
57
+ 'logout_url ' => null ,
54
58
'user ' => '' ,
55
59
'roles ' => array (),
56
60
'inherited_roles ' => array (),
@@ -61,7 +65,7 @@ public function collect(Request $request, Response $response, \Exception $except
61
65
'enabled ' => true ,
62
66
'authenticated ' => false ,
63
67
'token_class ' => null ,
64
- 'provider_key ' => null ,
68
+ 'logout_url ' => null ,
65
69
'user ' => '' ,
66
70
'roles ' => array (),
67
71
'inherited_roles ' => array (),
@@ -70,6 +74,7 @@ public function collect(Request $request, Response $response, \Exception $except
70
74
} else {
71
75
$ inheritedRoles = array ();
72
76
$ assignedRoles = $ token ->getRoles ();
77
+
73
78
if (null !== $ this ->roleHierarchy ) {
74
79
$ allRoles = $ this ->roleHierarchy ->getReachableRoles ($ assignedRoles );
75
80
foreach ($ allRoles as $ role ) {
@@ -78,11 +83,21 @@ public function collect(Request $request, Response $response, \Exception $except
78
83
}
79
84
}
80
85
}
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
+
81
96
$ this ->data = array (
82
97
'enabled ' => true ,
83
98
'authenticated ' => $ token ->isAuthenticated (),
84
99
'token_class ' => get_class ($ token ),
85
- 'provider_key ' => method_exists ( $ token , ' getProviderKey ' ) ? $ token -> getProviderKey () : null ,
100
+ 'logout_url ' => $ logoutUrl ,
86
101
'user ' => $ token ->getUsername (),
87
102
'roles ' => array_map (function (RoleInterface $ role ) { return $ role ->getRole ();}, $ assignedRoles ),
88
103
'inherited_roles ' => array_map (function (RoleInterface $ role ) { return $ role ->getRole (); }, $ inheritedRoles ),
@@ -167,9 +182,9 @@ public function getTokenClass()
167
182
*
168
183
* @return string The provider key
169
184
*/
170
- public function getProviderKey ()
185
+ public function getLogoutUrl ()
171
186
{
172
- return $ this ->data ['provider_key ' ];
187
+ return $ this ->data ['logout_url ' ];
173
188
}
174
189
175
190
/**
0 commit comments