Przeglądaj źródła

Merge branch '84-integrate' into 'develop'

84 integrate



See merge request !6

zengweijie 3 lat temu
rodzic
commit
d7283da79f

+ 29 - 9
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/keycloak/KeycloakServiceImpl.java

@@ -8,6 +8,7 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.keycloak.admin.client.Keycloak;
 import org.keycloak.admin.client.resource.RealmResource;
 import org.keycloak.admin.client.resource.UserResource;
+import org.keycloak.representations.idm.ClientRepresentation;
 import org.keycloak.representations.idm.GroupRepresentation;
 import org.keycloak.representations.idm.RoleRepresentation;
 import org.keycloak.representations.idm.UserRepresentation;
@@ -184,16 +185,35 @@ public class KeycloakServiceImpl implements KeycloakService {
     }
 
     @Override
-    public String getUserTenant(String userId) {
-        List<GroupRepresentation> groups = keycloak.realm(realm).users().get(userId).groups();
-        if (groups.isEmpty()) {
-            return null;
-        }
-        String path = groups.get(0).getPath();
-        if (path.lastIndexOf('/') == 0) {
-            return path;
+    public List<String> getUserGroupPathList(String userId) {
+        return keycloak.realm(realm).users().get(userId).groups().stream().map(GroupRepresentation::getPath).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<String> getUserRealmRoles(String userId) {
+        return keycloak.realm(realm)
+            .users()
+            .get(userId)
+            .roles()
+            .getAll()
+            .getRealmMappings()
+            .stream()
+            .map(RoleRepresentation::getName)
+            .collect(Collectors.toList());
+    }
+
+    @Override
+    public Map<String, List<String>> getUserClientRoles(String userId) {
+        Map<String, List<String>> resultMap = new HashMap<>();
+        List<ClientRepresentation> clientList = keycloak.realm(realm).clients().findAll();
+        for (ClientRepresentation clientRepresentation : clientList) {
+            String clientId = clientRepresentation.getClientId();
+            List<RoleRepresentation> roleList = keycloak.realm(realm).users().get(userId).roles().clientLevel(clientRepresentation.getId()).listEffective();
+            if (!roleList.isEmpty()) {
+                resultMap.put(clientId, roleList.stream().map(RoleRepresentation::getName).collect(Collectors.toList()));
+            }
         }
-        return path.substring(0, path.indexOf('/', 1));
+        return resultMap;
     }
 
     private List<KeycloakUserCO> getUserByRoleAndGroup(String group, String role) {

+ 5 - 1
smsb-customer-manager-client/src/main/java/com/inspur/customer/service/client/keycloak/KeycloakService.java

@@ -72,5 +72,9 @@ public interface KeycloakService {
      */
     List<KeycloakUserCO> searchUserByAttrEntry(List<Pair> entries);
 
-    String getUserTenant(String userId);
+    List<String> getUserGroupPathList(String userId);
+
+    List<String> getUserRealmRoles(String userId);
+
+    Map<String, List<String>> getUserClientRoles(String userId);
 }

+ 3 - 6
smsb-customer-manager-start-web/src/test/java/com/inspur/customer/KeycloakTest.java

@@ -4,12 +4,13 @@ import com.inspur.customer.service.client.keycloak.KeycloakService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.keycloak.admin.client.Keycloak;
-import org.keycloak.representations.idm.UserRepresentation;
+import org.keycloak.representations.idm.*;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 /**
@@ -19,7 +20,7 @@ import java.util.Optional;
  **/
 @Slf4j
 @SpringBootTest
-public class KeycloakTest {
+class KeycloakTest {
     @Resource
     Keycloak keycloak;
     @Value("${keycloak.realm}")
@@ -28,8 +29,4 @@ public class KeycloakTest {
     @Resource
     KeycloakService keycloakService;
 
-    @Test
-    void test() {
-        log.info(keycloakService.getUserTenant("9d0bcc7c-7fc3-492a-954d-c3f86246bbcd"));
-    }
 }