diff --git a/src/main/java/com/xuxd/kafka/console/service/impl/AclServiceImpl.java b/src/main/java/com/xuxd/kafka/console/service/impl/AclServiceImpl.java index c6ebd80..0f01f49 100644 --- a/src/main/java/com/xuxd/kafka/console/service/impl/AclServiceImpl.java +++ b/src/main/java/com/xuxd/kafka/console/service/impl/AclServiceImpl.java @@ -15,6 +15,7 @@ import kafka.console.KafkaAclConsole; import kafka.console.KafkaConfigConsole; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.kafka.clients.admin.UserScramCredentialsDescription; import org.apache.kafka.common.acl.AclBinding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -68,10 +69,11 @@ public class AclServiceImpl implements AclService { resultMap.put(k, map); }); if (entry.isNull() || StringUtils.isNotBlank(entry.getPrincipal())) { - Set userList = configConsole.getUserList(StringUtils.isNotBlank(entry.getPrincipal()) ? Collections.singletonList(entry.getPrincipal()) : null); - userList.forEach(u -> { - if (!resultMap.containsKey(u)) { - resultMap.put(u, Collections.emptyMap()); + Map detailList = configConsole.getUserDetailList(StringUtils.isNotBlank(entry.getPrincipal()) ? Collections.singletonList(entry.getPrincipal()) : null); + + detailList.values().forEach(u -> { + if (!resultMap.containsKey(u.name()) && !u.credentialInfos().isEmpty()) { + resultMap.put(u.name(), Collections.emptyMap()); } }); } diff --git a/src/main/scala/kafka/console/KafkaConfigConsole.scala b/src/main/scala/kafka/console/KafkaConfigConsole.scala index 6c4c8c1..93c979f 100644 --- a/src/main/scala/kafka/console/KafkaConfigConsole.scala +++ b/src/main/scala/kafka/console/KafkaConfigConsole.scala @@ -5,7 +5,7 @@ import java.util.Set import java.util.concurrent.TimeUnit import com.xuxd.kafka.console.config.KafkaConfig -import org.apache.kafka.clients.admin.{ScramCredentialInfo, ScramMechanism, UserScramCredentialDeletion, UserScramCredentialUpsertion} +import org.apache.kafka.clients.admin._ /** * kafka-console-ui. @@ -23,6 +23,12 @@ class KafkaConfigConsole(config: KafkaConfig) extends KafkaConsole(config: Kafka }).asInstanceOf[Set[String]] } + def getUserDetailList(users: util.List[String]): util.Map[String, UserScramCredentialsDescription] = { + withAdminClient({ + adminClient => adminClient.describeUserScramCredentials(users).all().get() + }).asInstanceOf[util.Map[String, UserScramCredentialsDescription]] + } + def addOrUpdateUser(name: String, pass: String): Boolean = { withAdminClient(adminClient => { try { diff --git a/ui/src/views/acl/Acl.vue b/ui/src/views/acl/Acl.vue index f87e911..fe154fd 100644 --- a/ui/src/views/acl/Acl.vue +++ b/ui/src/views/acl/Acl.vue @@ -45,8 +45,22 @@ +
+ 新增/更新用户 + +
- 删除 + + 删除 + 授予生产权限 + 收回生产权限 + 授予消费权限 + 收回消费权限 + 增加权限 + @@ -79,9 +93,11 @@ + +