@@ -20,13 +20,15 @@ namespace ErrorCodes
20
20
21
21
TokenAccessStorage::TokenAccessStorage (const String & storage_name_, AccessControl & access_control_, const Poco::Util::AbstractConfiguration & config_, const String & prefix_)
22
22
: IAccessStorage(storage_name_), access_control(access_control_), config(config_), prefix(prefix_),
23
- roles_filter (config.getString(prefix.empty() ? "" : prefix + "." + "roles_filter", "")),
24
23
memory_storage (storage_name_, access_control.getChangesNotifier(), false)
25
24
{
26
25
std::lock_guard lock (mutex);
27
26
28
27
const String prefix_str = (prefix.empty () ? " " : prefix + " ." );
29
28
29
+ if (config.has (prefix_str + " roles_filter" ))
30
+ roles_filter.emplace (config.getString (prefix_str + " roles_filter" ));
31
+
30
32
provider_name = config.getString (prefix_str + " processor" );
31
33
if (provider_name.empty ())
32
34
throw Exception (ErrorCodes::BAD_ARGUMENTS, " 'processor' must be specified for Token user directory" );
@@ -369,21 +371,22 @@ std::optional<AuthResult> TokenAccessStorage::authenticateImpl(
369
371
throwAddressNotAllowed (address);
370
372
371
373
std::set<String> external_roles;
372
- if (!roles_filter.ok ())
373
- {
374
- external_roles = token_credentials.getGroups ();
375
- LOG_TRACE (getLogger (), " {}: No external role filtering set, applying all available groups" , getStorageName ());
376
- }
377
- else
374
+ if (roles_filter.has_value () && roles_filter.value ().ok ())
378
375
{
376
+ LOG_TRACE (getLogger (), " {}: External role filter found, applying only matching groups" , getStorageName ());
379
377
for (const auto & group: token_credentials.getGroups ()) {
380
- if (RE2::FullMatch (group, roles_filter))
378
+ if (RE2::FullMatch (group, roles_filter. value () ))
381
379
{
382
380
external_roles.insert (group);
383
381
LOG_TRACE (getLogger (), " {}: Granted role (group) {} to user" , getStorageName (), user->getName ());
384
382
}
385
383
}
386
384
}
385
+ else
386
+ {
387
+ LOG_TRACE (getLogger (), " {}: No external role filtering set, applying all available groups" , getStorageName ());
388
+ external_roles = token_credentials.getGroups ();
389
+ }
387
390
388
391
if (new_user)
389
392
{
0 commit comments