This is an automated email from the ASF dual-hosted git repository.
RosiKyu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 6358dc3bd08 ui: link account to LDAP - #13950 (#13950)
6358dc3bd08 is described below
commit 6358dc3bd08d0a5bac8a5ffa2caf2af37e4cf4f0
Author: dahn <[email protected]>
AuthorDate: Thu Nov 12 08:03:28 2026 +0100
ui: link account to LDAP - #13950 (#13950)
---
.../api/command/LinkAccountToLdapCmd.java | 4 +-
.../api/command/LinkAccountToLdapCmdTest.java | 8 ++++
ui/public/locales/ar.json | 3 ++
ui/public/locales/ca.json | 3 ++
ui/public/locales/de_DE.json | 3 ++
ui/public/locales/el_GR.json | 3 ++
ui/public/locales/en.json | 3 ++
ui/public/locales/es.json | 3 ++
ui/public/locales/fr_FR.json | 3 ++
ui/public/locales/hi.json | 2 +
ui/public/locales/hu.json | 3 ++
ui/public/locales/it_IT.json | 3 ++
ui/public/locales/ja_JP.json | 3 ++
ui/public/locales/ko_KR.json | 3 ++
ui/public/locales/nb_NO.json | 3 ++
ui/public/locales/nl_NL.json | 3 ++
ui/public/locales/pl.json | 3 ++
ui/public/locales/pt_BR.json | 3 ++
ui/public/locales/ru_RU.json | 3 ++
ui/public/locales/te.json | 3 ++
ui/public/locales/zh_CN.json | 3 ++
ui/src/config/section/account.js | 28 ++++++++++++++
ui/src/config/section/domain.js | 5 ++-
ui/src/views/AutogenView.vue | 7 ++--
ui/src/views/iam/DomainActionForm.vue | 10 +++--
ui/tests/unit/views/AutogenView.spec.js | 45 ++++++++++++++++++++++
26 files changed, 154 insertions(+), 9 deletions(-)
diff --git
a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
index d3ab463cffb..dbf61c006eb 100644
---
a/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
+++
b/plugins/user-authenticators/ldap/src/main/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmd.java
@@ -79,7 +79,7 @@ public class LinkAccountToLdapCmd extends BaseCmd {
if (admin != null) {
LdapUser ldapUser = null;
try {
- ldapUser = _ldapManager.getUser(admin, type, ldapDomain,
domainId);
+ ldapUser = _ldapManager.getUser(admin, getType(),
ldapDomain, domainId);
} catch (NoLdapUserMatchingQueryException e) {
logger.debug("no ldap user matching username {} in the
given group/ou", admin, e);
}
@@ -120,7 +120,7 @@ public class LinkAccountToLdapCmd extends BaseCmd {
}
public String getType() {
- return type;
+ return type == null ? LdapManager.LinkType.GROUP.name() : type;
}
public String getLdapDomain() {
diff --git
a/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
index e616bd57378..5816da8f6c4 100644
---
a/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
+++
b/plugins/user-authenticators/ldap/src/test/java/org/apache/cloudstack/api/command/LinkAccountToLdapCmdTest.java
@@ -100,4 +100,12 @@ public class LinkAccountToLdapCmdTest implements
LdapConfigurationChanger {
assertEquals("accountId", String.valueOf(accountId),
result.getAdminId());
assertEquals("accountName", String.valueOf(accountName),
result.getAccountName());
}
+
+ @Test
+ public void getTypeDefaultsToGroup() throws Exception {
+ assertEquals("GROUP", linkAccountToLdapCmd.getType());
+
+ setHiddenField(linkAccountToLdapCmd, "type", "OU");
+ assertEquals("OU", linkAccountToLdapCmd.getType());
+ }
}
diff --git a/ui/public/locales/ar.json b/ui/public/locales/ar.json
index e8e4db66cb5..1509eebd541 100644
--- a/ui/public/locales/ar.json
+++ b/ui/public/locales/ar.json
@@ -12,6 +12,8 @@
"label.account.id": "Account ID",
"label.account.name": "Account Name",
"label.account.specific": "Account-Specific",
+"label.account.type.domain.admin": "مسؤول النطاق",
+"label.account.type.normal": "عادي (مستخدم)",
"label.accounts": "Accounts",
"label.accounttype": "Account Type",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "LDAP Group",
"label.level": "Level",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "Link Account to LDAP",
"label.link.domain.to.ldap": "Link Domain to LDAP",
"label.linklocalip": "Control IP Address",
"label.load.balancer": "Load Balancer",
diff --git a/ui/public/locales/ca.json b/ui/public/locales/ca.json
index d3e417eb821..9bb8d9ff0d0 100644
--- a/ui/public/locales/ca.json
+++ b/ui/public/locales/ca.json
@@ -12,6 +12,8 @@
"label.account.id": "Account ID",
"label.account.name": "Account Name",
"label.account.specific": "Account-Specific",
+"label.account.type.domain.admin": "Administrador de domini",
+"label.account.type.normal": "Normal (Usuari)",
"label.accounts": "Accounts",
"label.accounttype": "Account Type",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "LDAP Group",
"label.level": "Level",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "Link Account to LDAP",
"label.link.domain.to.ldap": "Link Domain to LDAP",
"label.linklocalip": "Control IP Address",
"label.load.balancer": "Load Balancer",
diff --git a/ui/public/locales/de_DE.json b/ui/public/locales/de_DE.json
index 2fee9202163..fc026513563 100644
--- a/ui/public/locales/de_DE.json
+++ b/ui/public/locales/de_DE.json
@@ -24,6 +24,8 @@
"label.account.id": "Benutzerkonto-ID",
"label.account.name": "Benutzerkonto-Name",
"label.account.specific": "Besonderheiten des Benutzerkontos",
+"label.account.type.domain.admin": "Domänen-Administrator",
+"label.account.type.normal": "Normal (Benutzer)",
"label.accounts": "Benutzerkonten",
"label.accounttype": "Benutzerkontotyp",
"label.acl.export": "Export ACL rules",
@@ -836,6 +838,7 @@
"label.limit": "Limit",
"label.limitcpuuse": "CPU Obergrenze",
"label.limits": "Limits konfigurieren",
+"label.link.account.to.ldap": "Verbinde Benutzerkonto mit LDAP",
"label.link.domain.to.ldap": "Verbinde Domain mit LDAP",
"label.linklocalip": "Link-Local IP-Adresse",
"label.linux": "Linux",
diff --git a/ui/public/locales/el_GR.json b/ui/public/locales/el_GR.json
index c5506383752..ea86c1ad13a 100644
--- a/ui/public/locales/el_GR.json
+++ b/ui/public/locales/el_GR.json
@@ -39,6 +39,8 @@
"label.account.id": "Αναγνωριστικό λογαριασμού",
"label.account.name": "Όνομα λογαριασμού",
"label.account.specific": "Ανά λογαριασμό",
+"label.account.type.domain.admin": "Διαχειριστής Τομέα",
+"label.account.type.normal": "Κανονικός (Χρήστης)",
"label.accounts": "Λογαριασμοί",
"label.accountstate": "Κατάσταση λογαριασμού",
"label.accounttype": "Τύπος λογαριασμού",
@@ -1630,6 +1632,7 @@
"label.limits": "Όρια",
"label.limits.configure": "Ρύθμιση ορίων",
"label.link": "Σύνδεσμος",
+"label.link.account.to.ldap": "Σύνδεση λογαριασμού με LDAP",
"label.link.domain.to.ldap": "Σύνδεση τομέα με LDAP",
"label.linklocalip": "Διεύθυνση IP Link-local/ελέγχου",
"label.linux": "Linux",
diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index d2ca3b7f536..ef1d5e5889f 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -40,6 +40,8 @@
"label.account.id": "Account ID",
"label.account.name": "Account name",
"label.account.specific": "Account-specific",
+"label.account.type.domain.admin": "Domain Admin",
+"label.account.type.normal": "Normal (User)",
"label.accounts": "Accounts",
"label.accountstate": "Account state",
"label.accounttype": "Account type",
@@ -1635,6 +1637,7 @@
"label.limits": "Limits",
"label.limits.configure": "Configure limits",
"label.link": "Link",
+"label.link.account.to.ldap": "Link account to LDAP",
"label.link.domain.to.ldap": "Link domain to LDAP",
"label.linklocalip": "Link-local/Control IP address",
"label.linux": "Linux",
diff --git a/ui/public/locales/es.json b/ui/public/locales/es.json
index b7a409adad1..33e34687351 100644
--- a/ui/public/locales/es.json
+++ b/ui/public/locales/es.json
@@ -12,6 +12,8 @@
"label.account.id": "ID de la cuenta",
"label.account.name": "Nombre de cuenta",
"label.account.specific": "espec\u00edficas de la cuenta",
+"label.account.type.domain.admin": "Administrador de dominio",
+"label.account.type.normal": "Normal (Usuario)",
"label.accounts": "Cuentas",
"label.accounttype": "Tipo de Cuenta",
"label.acl.export": "Export ACL rules",
@@ -667,6 +669,7 @@
"label.ldap.group.name": "Grupo LDAP",
"label.level": "Nivel",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "Enlazar Cuenta a LDAP",
"label.link.domain.to.ldap": "Enlazar Dominio a LDAP",
"label.linklocalip": "Direcci\u00f3n IP de Enlace Local",
"label.load.balancer": "Balanceador de carga",
diff --git a/ui/public/locales/fr_FR.json b/ui/public/locales/fr_FR.json
index 424f4749aa3..63fefbc049f 100644
--- a/ui/public/locales/fr_FR.json
+++ b/ui/public/locales/fr_FR.json
@@ -12,6 +12,8 @@
"label.account.id": "ID de compte",
"label.account.name": "Nom de compte",
"label.account.specific": "Sp\u00e9cifique au compte",
+"label.account.type.domain.admin": "Administrateur de domaine",
+"label.account.type.normal": "Normal (Utilisateur)",
"label.accounts": "Comptes",
"label.accounttype": "Type Compte",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "Groupe LDAP",
"label.level": "Niveau",
"label.limitcpuuse": "Limitation CPU",
+"label.link.account.to.ldap": "Lien Compte vers LDAP",
"label.link.domain.to.ldap": "Lien Domaine vers LDAP",
"label.linklocalip": "Adresse IP lien local",
"label.load.balancer": "R\u00e9partiteur de charge",
diff --git a/ui/public/locales/hi.json b/ui/public/locales/hi.json
index 9d7440b9262..9a04301378a 100644
--- a/ui/public/locales/hi.json
+++ b/ui/public/locales/hi.json
@@ -3,6 +3,8 @@
"label.access": "एक्सेस",
"label.accesskey": "एक्सेस की",
"label.account": "खाता",
+"label.account.type.domain.admin": "डोमेन व्यवस्थापक",
+"label.account.type.normal": "सामान्य (उपयोगकर्ता)",
"label.accounts": "लेखा",
"label.accounttype": "खाता प्रकार",
"label.aclid": "ACL",
diff --git a/ui/public/locales/hu.json b/ui/public/locales/hu.json
index ae58379d343..c22d5c521e6 100644
--- a/ui/public/locales/hu.json
+++ b/ui/public/locales/hu.json
@@ -12,6 +12,8 @@
"label.account.id": "Sz\u00e1mla azonos\u00edt\u00f3",
"label.account.name": "Sz\u00e1mla n\u00e9v",
"label.account.specific": "Sz\u00e1mla-specifikus",
+"label.account.type.domain.admin": "Tartomány rendszergazda",
+"label.account.type.normal": "Normál (Felhasználó)",
"label.accounts": "Sz\u00e1ml\u00e1k",
"label.accounttype": "Sz\u00e1mla t\u00edpus",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "LDAP csoport",
"label.level": "Szint",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "Link Account to LDAP",
"label.link.domain.to.ldap": "Link Domain to LDAP",
"label.linklocalip": "Control IP Address",
"label.load.balancer": "Terhel\u00e9seloszt\u00f3",
diff --git a/ui/public/locales/it_IT.json b/ui/public/locales/it_IT.json
index a2907b71f23..7bb3ed88ac3 100644
--- a/ui/public/locales/it_IT.json
+++ b/ui/public/locales/it_IT.json
@@ -12,6 +12,8 @@
"label.account.id": "ID dell'Account",
"label.account.name": "Nome Account",
"label.account.specific": "Specifico dell'Account",
+"label.account.type.domain.admin": "Amministratore di dominio",
+"label.account.type.normal": "Normale (Utente)",
"label.accounts": "Utenti",
"label.accounttype": "Account Type",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "LDAP Group",
"label.level": "Livello",
"label.limitcpuuse": "Limite CPU",
+"label.link.account.to.ldap": "Link Account to LDAP",
"label.link.domain.to.ldap": "Link Domain to LDAP",
"label.linklocalip": "Control IP Address",
"label.load.balancer": "Load Balancer",
diff --git a/ui/public/locales/ja_JP.json b/ui/public/locales/ja_JP.json
index b7f32d7a2e1..3272c52d982 100644
--- a/ui/public/locales/ja_JP.json
+++ b/ui/public/locales/ja_JP.json
@@ -53,6 +53,8 @@
"label.account.id": "アカウントID",
"label.account.name": "アカウント名",
"label.account.specific": "アカウント固有",
+ "label.account.type.domain.admin": "ドメイン管理者",
+ "label.account.type.normal": "通常 (ユーザー)",
"label.accounts": "アカウント",
"label.accounttype": "アカウントタイプ",
"label.access.kubernetes.nodes": "Kubernetesノードに接続",
@@ -1316,6 +1318,7 @@
"label.limit": "制限",
"label.limitcpuuse": "CPUキャップ",
"label.limits": "制限設定",
+ "label.link.account.to.ldap": "アカウントをLDAPにリンクする",
"label.link.domain.to.ldap": "ドメインをLDAPにリンクする",
"label.linklocalip": "リンクローカルIPアドレス",
"label.linux": "Linux",
diff --git a/ui/public/locales/ko_KR.json b/ui/public/locales/ko_KR.json
index a951b859b48..fd1aeb13301 100644
--- a/ui/public/locales/ko_KR.json
+++ b/ui/public/locales/ko_KR.json
@@ -28,6 +28,8 @@
"label.account.id": "\uacc4\uc815 ID",
"label.account.name": "\uacc4\uc815 \uc774\ub984",
"label.account.specific": "\uace0\uc720 \uacc4\uc815",
+"label.account.type.domain.admin": "도메인 관리자",
+"label.account.type.normal": "일반 (사용자)",
"label.accounts": "\uacc4\uc815",
"label.accounttype": "\uacc4\uc815 \uc720\ud615",
"label.acl.export": "ACL \ub0b4\ubcf4\ub0b4\uae30",
@@ -868,6 +870,7 @@
"label.limit": "\uc81c\ud55c",
"label.limitcpuuse": "CPU \uc81c\ud55c",
"label.limits": "\uc81c\ud55c \uad6c\uc131",
+"label.link.account.to.ldap": "LDAP에 계정 연결",
"label.link.domain.to.ldap": "LDAP\uc5d0 \ub3c4\uba54\uc778 \uc5f0\uacb0",
"label.linklocalip": "\ub85c\uceec \uc5f0\uacb0 IP \uc8fc\uc18c",
"label.linux": "Linux",
diff --git a/ui/public/locales/nb_NO.json b/ui/public/locales/nb_NO.json
index 586d1fc5b25..d3828ed91a5 100644
--- a/ui/public/locales/nb_NO.json
+++ b/ui/public/locales/nb_NO.json
@@ -12,6 +12,8 @@
"label.account.id": "Konto ID",
"label.account.name": "Kontonavn",
"label.account.specific": "Kontospesifikk",
+"label.account.type.domain.admin": "Domeneadministrator",
+"label.account.type.normal": "Normal (Bruker)",
"label.accounts": "Kontoer",
"label.accounttype": "Kontotype",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "LDAP Gruppe",
"label.level": "Niv\u00e5",
"label.limitcpuuse": "CPU begrensning",
+"label.link.account.to.ldap": "Knytt konto til LDAP",
"label.link.domain.to.ldap": "Knytt domene til LDAP",
"label.linklocalip": "Link-lokal IP-adresse",
"label.load.balancer": "Lastbalanserer",
diff --git a/ui/public/locales/nl_NL.json b/ui/public/locales/nl_NL.json
index 15b1bbb1394..758bdb2ee00 100644
--- a/ui/public/locales/nl_NL.json
+++ b/ui/public/locales/nl_NL.json
@@ -12,6 +12,8 @@
"label.account.id": "Account ID",
"label.account.name": "Account Naam",
"label.account.specific": "Account-specifiek",
+"label.account.type.domain.admin": "Domeinbeheerder",
+"label.account.type.normal": "Normaal (Gebruiker)",
"label.accounts": "Accounts",
"label.accounttype": "Account type",
"label.acl.export": "Export ACL rules",
@@ -651,6 +653,7 @@
"label.ldap.group.name": "LDAP Groep",
"label.level": "Level",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "link account aan LDAP",
"label.link.domain.to.ldap": "link domein aan LDAP",
"label.linklocalip": "Control IP Adres",
"label.load.balancer": "Load Balancer",
diff --git a/ui/public/locales/pl.json b/ui/public/locales/pl.json
index fbbbf612bc1..f089b6cd441 100644
--- a/ui/public/locales/pl.json
+++ b/ui/public/locales/pl.json
@@ -12,6 +12,8 @@
"label.account.id": "ID konta",
"label.account.name": "Nazwa konta",
"label.account.specific": "Account-Specific",
+"label.account.type.domain.admin": "Administrator domeny",
+"label.account.type.normal": "Zwykły (Użytkownik)",
"label.accounts": "Konta",
"label.accounttype": "Account Type",
"label.acl.export": "Export ACL rules",
@@ -650,6 +652,7 @@
"label.ldap.group.name": "LDAP Group",
"label.level": "Poziom",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "Link Account to LDAP",
"label.link.domain.to.ldap": "Link Domain to LDAP",
"label.linklocalip": "Control IP Address",
"label.load.balancer": "Load Balancer",
diff --git a/ui/public/locales/pt_BR.json b/ui/public/locales/pt_BR.json
index 1efd99f40d1..154c046099d 100644
--- a/ui/public/locales/pt_BR.json
+++ b/ui/public/locales/pt_BR.json
@@ -36,6 +36,8 @@
"label.account.id": "ID da conta",
"label.account.name": "Nome da conta",
"label.account.specific": "Espec\u00edfico da conta",
+"label.account.type.domain.admin": "Administrador de domínio",
+"label.account.type.normal": "Normal (Usuário)",
"label.accounts": "Contas",
"label.accountstate": "Estado da conta",
"label.accounttype": "Tipo de conta",
@@ -1388,6 +1390,7 @@
"label.limits": "Configurar limites",
"label.limits.configure": "Configurar limites",
"label.link": "Link",
+"label.link.account.to.ldap": "Link conta para LDAP",
"label.link.domain.to.ldap": "Link dom\u00ednio para LDAP",
"label.linklocalip": "Endere\u00e7o IP do Control",
"label.linux": "Linux",
diff --git a/ui/public/locales/ru_RU.json b/ui/public/locales/ru_RU.json
index 4fb3788bc51..0a7da67a902 100644
--- a/ui/public/locales/ru_RU.json
+++ b/ui/public/locales/ru_RU.json
@@ -12,6 +12,8 @@
"label.account.id": "ID \u0443\u0447\u0451\u0442\u043d\u043e\u0439
\u0437\u0430\u043f\u0438\u0441\u0438",
"label.account.name": "\u0418\u043c\u044f
\u0443\u0447\u0451\u0442\u043d\u043e\u0439
\u0437\u0430\u043f\u0438\u0441\u0438",
"label.account.specific":
"\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430
\u0430\u043a\u043a\u0430\u0443\u043d\u043d\u0442\u0430",
+"label.account.type.domain.admin": "Администратор домена",
+"label.account.type.normal": "Обычный (Пользователь)",
"label.accounts": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435
\u0437\u0430\u043f\u0438\u0441\u0438",
"label.accounttype": "Account Type",
"label.acl.export": "Export ACL rules",
@@ -649,6 +651,7 @@
"label.ldap.group.name": "LDAP Group",
"label.level": "\u0423\u0440\u043e\u0432\u0435\u043d\u044c",
"label.limitcpuuse": "CPU Cap",
+"label.link.account.to.ldap": "Link Account to LDAP",
"label.link.domain.to.ldap": "Link Domain to LDAP",
"label.linklocalip": "\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439
IP \u0430\u0434\u0440\u0435\u0441",
"label.load.balancer":
"\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a
\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438",
diff --git a/ui/public/locales/te.json b/ui/public/locales/te.json
index 0c332af53ae..e298a5352d1 100644
--- a/ui/public/locales/te.json
+++ b/ui/public/locales/te.json
@@ -37,6 +37,8 @@
"label.account.id": "ఖాతా ID",
"label.account.name": "ఖాతా పేరు",
"label.account.specific": "ఖాతా-నిర్దిష్ట",
+ "label.account.type.domain.admin": "డొమైన్ నిర్వాహకుడు",
+ "label.account.type.normal": "సాధారణ (వినియోగదారు)",
"label.accounts": "ఖాతాలు",
"label.accountstate": "ఖాతా స్థితి",
"label.accounttype": "ఖాతా రకం",
@@ -1327,6 +1329,7 @@
"label.limits": "పరిమితులు",
"label.limits.configure": "పరిమితులను కాన్ఫిగర్ చేయండి",
"label.link": "లింక్",
+ "label.link.account.to.ldap": "ఖాతాను LDAPకి లింక్ చేయండి",
"label.link.domain.to.ldap": "డొమైన్ను LDAPకి లింక్ చేయండి",
"label.linklocalip": "లింక్-స్థానిక/నియంత్రణ IP చిరునామా",
"label.linux": "Linux",
diff --git a/ui/public/locales/zh_CN.json b/ui/public/locales/zh_CN.json
index 9536bab7ee4..689b026cb42 100644
--- a/ui/public/locales/zh_CN.json
+++ b/ui/public/locales/zh_CN.json
@@ -61,6 +61,8 @@
"label.account.id": "\u5E10\u6237\u6807\u8BC6\u7801",
"label.account.name": "\u5E10\u6237\u540D\u79F0",
"label.account.specific": "\u5E10\u6237\u4E13\u7528",
+ "label.account.type.domain.admin": "域管理员",
+ "label.account.type.normal": "普通(用户)",
"label.accounts": "\u5E10\u6237",
"label.accounttype": "\u5E10\u53F7\u7C7B\u578B",
@@ -1515,6 +1517,7 @@
"label.limit": "\u9650\u5236",
"label.limitcpuuse": "CPU \u4E0A\u9650",
"label.limits": "\u914D\u7F6E\u9650\u5236",
+ "label.link.account.to.ldap": "帐户链接至 LDAP",
"label.link.domain.to.ldap": "\u57DF\u94FE\u63A5\u81F3 LDAP",
"label.linklocalip": "\u672C\u5730\u5730\u5740",
"label.linux": "Linux",
diff --git a/ui/src/config/section/account.js b/ui/src/config/section/account.js
index 5766fd8a0f9..d04c683817e 100644
--- a/ui/src/config/section/account.js
+++ b/ui/src/config/section/account.js
@@ -121,6 +121,34 @@ export default {
},
component: shallowRef(defineAsyncComponent(() =>
import('@/views/iam/AddLdapAccount.vue')))
},
+ {
+ api: 'linkAccountToLdap',
+ icon: 'LinkOutlined',
+ label: 'label.link.account.to.ldap',
+ docHelp:
'adminguide/accounts.html#using-an-ldap-server-for-user-authentication',
+ dataView: true,
+ show: (record, store) => {
+ return store.isLdapEnabled
+ },
+ args: ['type', 'domainid', 'ldapdomain', 'account', 'accounttype',
'roleid', 'admin'],
+ mapping: {
+ type: {
+ options: ['GROUP', 'OU']
+ },
+ accounttype: {
+ options: [
+ { id: '0', description: 'label.account.type.normal' },
+ { id: '2', description: 'label.account.type.domain.admin' }
+ ]
+ },
+ domainid: {
+ value: (record) => { return record.domainid }
+ },
+ account: {
+ value: (record) => { return record.name }
+ }
+ }
+ },
{
api: 'updateAccount',
icon: 'edit-outlined',
diff --git a/ui/src/config/section/domain.js b/ui/src/config/section/domain.js
index 706cbf805cf..db1e72fac20 100644
--- a/ui/src/config/section/domain.js
+++ b/ui/src/config/section/domain.js
@@ -150,7 +150,10 @@ export default {
options: ['GROUP', 'OU']
},
accounttype: {
- options: ['0', '2']
+ options: [
+ { id: '0', description: 'label.account.type.normal' },
+ { id: '2', description: 'label.account.type.domain.admin' }
+ ]
},
domainid: {
value: (record) => { return record.id }
diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue
index 264ba0040af..889e9bdcaa4 100644
--- a/ui/src/views/AutogenView.vue
+++ b/ui/src/views/AutogenView.vue
@@ -339,9 +339,9 @@
<a-select-option
v-for="(opt, optIndex) in
currentAction.mapping[field.name].options"
:key="optIndex"
- :label="opt"
+ :label="opt.description ? $t(opt.description) : opt"
>
- {{ opt }}
+ {{ opt.description ? $t(opt.description) : opt }}
</a-select-option>
</a-select>
<a-select
@@ -1886,7 +1886,8 @@ export default {
break
}
if (action.mapping && key in action.mapping &&
action.mapping[key].options) {
- params[key] = action.mapping[key].options[input]
+ const mappedOption = action.mapping[key].options[input]
+ params[key] = (mappedOption && typeof mappedOption === 'object')
? mappedOption.id : mappedOption
if (['createAffinityGroup'].includes(action.api) && key ===
'type') {
if (params[key] === 'host anti-affinity (Strict)') {
params[key] = 'host anti-affinity'
diff --git a/ui/src/views/iam/DomainActionForm.vue
b/ui/src/views/iam/DomainActionForm.vue
index 8ee185f7e28..58b23252f66 100644
--- a/ui/src/views/iam/DomainActionForm.vue
+++ b/ui/src/views/iam/DomainActionForm.vue
@@ -67,8 +67,11 @@
:filterOption="(input, option) => {
return
option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}" >
- <a-select-option v-for="(opt, optIndex) in
action.mapping[field.name].options" :key="optIndex" :label="opt">
- {{ opt }}
+ <a-select-option
+ v-for="(opt, optIndex) in action.mapping[field.name].options"
+ :key="optIndex"
+ :label="opt.description ? $t(opt.description) : opt">
+ {{ opt.description ? $t(opt.description) : opt }}
</a-select-option>
</a-select>
<a-select
@@ -205,7 +208,8 @@ export default {
break
}
if (this.action.mapping && key in this.action.mapping &&
this.action.mapping[key].options) {
- params[key] = this.action.mapping[key].options[input]
+ const mappedOption = this.action.mapping[key].options[input]
+ params[key] = (mappedOption && typeof mappedOption ===
'object') ? mappedOption.id : mappedOption
} else if (param.type === 'uuid') {
params[key] = param.opts[input].id
} else if (param.type === 'list') {
diff --git a/ui/tests/unit/views/AutogenView.spec.js
b/ui/tests/unit/views/AutogenView.spec.js
index 3b06e2722e1..9375285ed37 100644
--- a/ui/tests/unit/views/AutogenView.spec.js
+++ b/ui/tests/unit/views/AutogenView.spec.js
@@ -2609,6 +2609,51 @@ describe('Views > AutogenView.vue', () => {
done()
})
+ it('API should be called with the option id when currentAction.mapping
option is an {id, description} object', async (done) => {
+ originalFunc.handleResponse = wrapper.vm.handleResponse
+ originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack
+ originalFunc.fetchData = wrapper.vm.fetchData
+ wrapper.vm.handleResponse = jest.fn(async (json, resourceName, action)
=> { return Promise.resolve() })
+ wrapper.vm.shouldNavigateBack = jest.fn((args) => { return false })
+ wrapper.vm.fetchData = jest.fn()
+ wrapper.vm.form = { column1: 1 }
+
+ const event = document.createEvent('Event')
+ await mockAxios.mockResolvedValue({})
+ await wrapper.setData({
+ showAction: true,
+ currentAction: {
+ api: 'testApiNameCase1',
+ label: 'label.name',
+ params: [{ name: 'column1', type: 'list' }],
+ paramFields: [{ name: 'column1', type: 'list' }],
+ mapping: {
+ column1: {
+ options: [
+ { id: 'column-id-1', description: 'label.column.value.one' },
+ { id: 'column-id-2', description: 'label.column.value.two' }
+ ]
+ }
+ }
+ },
+ resource: {}
+ })
+ await wrapper.vm.execSubmit(event)
+ await flushPromises()
+
+ expect(mockAxios).toHaveBeenCalled()
+ expect(mockAxios).toHaveBeenLastCalledWith({
+ url: '/',
+ method: 'POST',
+ data: common.createDataParams({
+ command: 'testApiNameCase1',
+ response: 'json',
+ column1: 'column-id-2'
+ })
+ })
+ done()
+ })
+
it('API should be called when form has input key not exist in
currentAction.mapping, type is list and currentAction.params[input] has id',
async (done) => {
originalFunc.handleResponse = wrapper.vm.handleResponse
originalFunc.shouldNavigateBack = wrapper.vm.shouldNavigateBack