From 9c2830ff0def92700ff78d99d794eccc320f09ae Mon Sep 17 00:00:00 2001 From: shripad shrinivasrao nalgirkar Date: Fri, 23 Apr 2021 09:56:06 +0200 Subject: [PATCH] Fix for issue of role maping for users with multiple roles IDVS-10752 --- .../seedstack/oauth/internal/OAuthRealm.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/seedstack/oauth/internal/OAuthRealm.java b/src/main/java/org/seedstack/oauth/internal/OAuthRealm.java index be39bff..08ae676 100644 --- a/src/main/java/org/seedstack/oauth/internal/OAuthRealm.java +++ b/src/main/java/org/seedstack/oauth/internal/OAuthRealm.java @@ -25,6 +25,8 @@ import javax.inject.Named; import java.util.*; +import net.minidev.json.JSONArray; + public class OAuthRealm implements Realm { private static final Logger LOGGER = LoggerFactory.getLogger(OAuthRealm.class); @Configuration @@ -158,10 +160,23 @@ private Set accessClaimToStrings(Collection> otherP return Optional.ofNullable(Principals.getOnePrincipalByType(otherPrincipals, AccessClaims.class)) .map(PrincipalProvider::get) .map(accessClaims -> accessClaims.get(claim)) + .map(claimObj -> {//changes done to handle users with multiple roles in the form of a JSONArray Jira - IDVS - 10752 + StringBuilder claimsStr = new StringBuilder(""); + if (claimObj instanceof JSONArray) { + JSONArray array = (JSONArray) claimObj; + for (int i = 0; i < array.size(); i++) { + claimsStr = claimsStr.append(array.get(i).toString()).append(" "); + } + return claimsStr.toString(); + } + return claimObj; + + }) .map(String::valueOf) .map(s -> s.split(" ")) .map(Arrays::asList) .map(HashSet::new) .orElse(new HashSet<>()); + } -} +} \ No newline at end of file