From be90bf6b28baf133415b951dd5607c5ff408d32b Mon Sep 17 00:00:00 2001
From: Bai <baijiangjie@gmail.com>
Date: Tue, 9 Apr 2024 15:40:31 +0800
Subject: [PATCH] perf: Update user orgs roles

---
 apps/locale/ja/LC_MESSAGES/django.po | 275 ++++++++++++++-------------
 apps/locale/zh/LC_MESSAGES/django.po | 269 ++++++++++++++------------
 apps/users/api/user.py               |  23 ++-
 apps/users/models/user.py            |  16 +-
 apps/users/serializers/user.py       |   6 +-
 5 files changed, 325 insertions(+), 264 deletions(-)

diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po
index 42318fc26..c02c19988 100644
--- a/apps/locale/ja/LC_MESSAGES/django.po
+++ b/apps/locale/ja/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-04-07 14:23+0800\n"
+"POT-Creation-Date: 2024-04-09 15:39+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -36,7 +36,7 @@ msgstr "成功: %s、失敗: %s、合計: %s"
 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47
 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123
 #: terminal/serializers/storage.py:142 users/forms/profile.py:22
-#: users/serializers/user.py:106
+#: users/serializers/user.py:109
 #: users/templates/users/_msg_user_created.html:13
 #: users/templates/users/user_password_verify.html:18
 #: xpack/plugins/cloud/serializers/account_attrs.py:28
@@ -80,7 +80,7 @@ msgstr "動的コード"
 msgid "Anonymous account"
 msgstr "匿名ユーザー"
 
-#: accounts/const/account.py:25 users/models/user.py:742
+#: accounts/const/account.py:25 users/models/user.py:752
 msgid "Local"
 msgstr "ローカル"
 
@@ -105,7 +105,7 @@ msgstr "更新"
 #: accounts/const/account.py:33 accounts/const/automation.py:109
 #: accounts/serializers/automations/change_secret.py:164 audits/const.py:62
 #: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19
-#: ops/const.py:76 terminal/const.py:79 xpack/plugins/cloud/const.py:46
+#: ops/const.py:76 terminal/const.py:79 xpack/plugins/cloud/const.py:47
 msgid "Failed"
 msgstr "失敗しました"
 
@@ -207,7 +207,7 @@ msgstr "作成のみ"
 #: authentication/serializers/password_mfa.py:24
 #: notifications/backends/__init__.py:10 settings/serializers/msg.py:22
 #: settings/serializers/msg.py:64 users/forms/profile.py:102
-#: users/forms/profile.py:109 users/models/user.py:806
+#: users/forms/profile.py:109 users/models/user.py:816
 #: users/templates/users/forgot_password.html:160
 #: users/views/profile/reset.py:94
 msgid "Email"
@@ -295,7 +295,7 @@ msgid "Version"
 msgstr "バージョン"
 
 #: accounts/models/account.py:57 accounts/serializers/account/account.py:215
-#: users/models/user.py:849
+#: users/models/user.py:859
 msgid "Source"
 msgstr "ソース"
 
@@ -309,7 +309,7 @@ msgstr "ソース ID"
 #: accounts/templates/accounts/change_secret_failed_info.html:12
 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7
 #: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28
-#: audits/models.py:59 authentication/api/connection_token.py:406
+#: audits/models.py:59 authentication/api/connection_token.py:411
 #: ops/models/base.py:18 perms/models/asset_permission.py:75
 #: perms/serializers/permission.py:41 settings/serializers/msg.py:33
 #: terminal/backends/command/models.py:18 terminal/models/session/session.py:34
@@ -542,7 +542,7 @@ msgstr "最終ログイン日"
 #: authentication/templates/authentication/_msg_different_city.html:9
 #: authentication/templates/authentication/_msg_oauth_bind.html:9
 #: terminal/serializers/storage.py:136 users/forms/profile.py:32
-#: users/forms/profile.py:115 users/models/user.py:802
+#: users/forms/profile.py:115 users/models/user.py:812
 #: users/templates/users/_msg_user_created.html:12
 #: xpack/plugins/cloud/serializers/account_attrs.py:26
 msgid "Username"
@@ -638,7 +638,7 @@ msgstr "パスワードルール"
 #: terminal/models/virtualapp/provider.py:10
 #: terminal/models/virtualapp/virtualapp.py:19 tickets/api/ticket.py:87
 #: users/forms/profile.py:33 users/models/group.py:13
-#: users/models/preference.py:11 users/models/user.py:804
+#: users/models/preference.py:11 users/models/user.py:814
 #: xpack/plugins/cloud/models.py:32 xpack/plugins/cloud/models.py:272
 #: xpack/plugins/cloud/serializers/task.py:70
 msgid "Name"
@@ -654,7 +654,7 @@ msgstr "特権アカウント"
 #: authentication/serializers/connect_token_secret.py:117
 #: terminal/models/applet/applet.py:40
 #: terminal/models/component/endpoint.py:120
-#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:169
+#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:173
 msgid "Is active"
 msgstr "アクティブです。"
 
@@ -821,7 +821,7 @@ msgstr "編集済み"
 #: acls/templates/acls/asset_login_reminder.html:6
 #: assets/models/automations/base.py:19
 #: assets/serializers/automations/base.py:20
-#: authentication/api/connection_token.py:405 ops/models/base.py:17
+#: authentication/api/connection_token.py:410 ops/models/base.py:17
 #: ops/models/job.py:147 ops/serializers/job.py:19
 #: terminal/templates/terminal/_msg_command_execute_alert.html:16
 msgid "Assets"
@@ -863,8 +863,8 @@ msgstr "ID"
 #: terminal/notifications.py:205 terminal/serializers/command.py:16
 #: terminal/templates/terminal/_msg_command_warning.html:6
 #: terminal/templates/terminal/_msg_session_sharing.html:6
-#: tickets/models/comment.py:21 users/const.py:14 users/models/user.py:1009
-#: users/models/user.py:1047 users/serializers/group.py:21
+#: tickets/models/comment.py:21 users/const.py:14 users/models/user.py:1019
+#: users/models/user.py:1057 users/serializers/group.py:21
 msgid "User"
 msgstr "ユーザー"
 
@@ -960,7 +960,7 @@ msgstr "关联平台,可以配置推送参数,如果不关联,则使用默
 #: terminal/models/component/endpoint.py:119
 #: terminal/models/session/session.py:47
 #: terminal/models/virtualapp/virtualapp.py:28 tickets/models/comment.py:32
-#: tickets/models/ticket/general.py:294 users/models/user.py:840
+#: tickets/models/ticket/general.py:294 users/models/user.py:850
 #: xpack/plugins/cloud/models.py:39 xpack/plugins/cloud/models.py:106
 msgid "Comment"
 msgstr "コメント"
@@ -1350,7 +1350,7 @@ msgid "Applications"
 msgstr "アプリケーション"
 
 #: applications/models.py:16 xpack/plugins/cloud/models.py:37
-#: xpack/plugins/cloud/serializers/account.py:67
+#: xpack/plugins/cloud/serializers/account.py:68
 msgid "Attrs"
 msgstr "ツールバーの"
 
@@ -1401,7 +1401,7 @@ msgid "  - Platform {} ansible disabled"
 msgstr "  - プラットフォーム {} ansible 無効"
 
 #: assets/automations/ping_gateway/manager.py:33
-#: authentication/models/connection_token.py:128
+#: authentication/models/connection_token.py:131
 msgid "No account"
 msgstr "アカウントなし"
 
@@ -1684,18 +1684,18 @@ msgstr "SSHパブリックキー"
 #: assets/models/_user.py:28 assets/models/automations/base.py:114
 #: assets/models/cmd_filter.py:41 assets/models/group.py:19
 #: audits/models.py:267 common/db/models.py:34 ops/models/base.py:54
-#: ops/models/job.py:235 users/models/user.py:1048
+#: ops/models/job.py:235 users/models/user.py:1058
 msgid "Date created"
 msgstr "作成された日付"
 
 #: assets/models/_user.py:29 assets/models/cmd_filter.py:42
-#: common/db/models.py:35 users/models/user.py:858
+#: common/db/models.py:35 users/models/user.py:868
 msgid "Date updated"
 msgstr "更新日"
 
 #: assets/models/_user.py:30 assets/models/cmd_filter.py:44
 #: assets/models/cmd_filter.py:91 assets/models/group.py:18
-#: common/db/models.py:32 users/models/user.py:847
+#: common/db/models.py:32 users/models/user.py:857
 #: users/serializers/group.py:32
 msgid "Created by"
 msgstr "によって作成された"
@@ -1884,7 +1884,7 @@ msgstr "確認済みの日付"
 
 #: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:66
 #: perms/serializers/permission.py:34 users/models/group.py:25
-#: users/models/user.py:810
+#: users/models/user.py:820
 msgid "User group"
 msgstr "ユーザーグループ"
 
@@ -1934,7 +1934,7 @@ msgstr "デフォルト"
 msgid "Default asset group"
 msgstr "デフォルトアセットグループ"
 
-#: assets/models/label.py:15 rbac/const.py:6 users/models/user.py:1033
+#: assets/models/label.py:15 rbac/const.py:6 users/models/user.py:1043
 msgid "System"
 msgstr "システム"
 
@@ -2584,7 +2584,7 @@ msgstr "ログインIP"
 
 #: audits/models.py:200 audits/serializers.py:52
 #: authentication/templates/authentication/_mfa_confirm_modal.html:14
-#: users/forms/profile.py:65 users/models/user.py:827
+#: users/forms/profile.py:65 users/models/user.py:837
 #: users/serializers/profile.py:102
 msgid "MFA"
 msgstr "MFA"
@@ -2633,7 +2633,7 @@ msgstr "ユーザー %s %s が現在のリソースをサブスクライブし
 #: audits/serializers.py:172 authentication/models/connection_token.py:47
 #: authentication/models/temp_token.py:13 perms/models/asset_permission.py:80
 #: tickets/models/ticket/apply_application.py:31
-#: tickets/models/ticket/apply_asset.py:20 users/models/user.py:845
+#: tickets/models/ticket/apply_asset.py:20 users/models/user.py:855
 msgid "Date expired"
 msgstr "期限切れの日付"
 
@@ -2666,29 +2666,29 @@ msgstr "認証トークン"
 
 #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73
 #: authentication/views/login.py:77 notifications/backends/__init__.py:11
-#: settings/serializers/auth/wecom.py:10 users/models/user.py:749
-#: users/models/user.py:859
+#: settings/serializers/auth/wecom.py:10 users/models/user.py:759
+#: users/models/user.py:869
 msgid "WeCom"
 msgstr "企業微信"
 
 #: audits/signal_handlers/login_log.py:38 authentication/views/feishu.py:105
 #: authentication/views/login.py:89 notifications/backends/__init__.py:14
-#: settings/serializers/auth/feishu.py:10 users/models/user.py:751
-#: users/models/user.py:861
+#: settings/serializers/auth/feishu.py:10 users/models/user.py:761
+#: users/models/user.py:871
 msgid "FeiShu"
 msgstr "本を飛ばす"
 
 #: audits/signal_handlers/login_log.py:40 authentication/views/login.py:101
 #: authentication/views/slack.py:87 notifications/backends/__init__.py:16
-#: settings/serializers/auth/slack.py:10 users/models/user.py:753
-#: users/models/user.py:863
+#: settings/serializers/auth/slack.py:10 users/models/user.py:763
+#: users/models/user.py:873
 msgid "Slack"
 msgstr ""
 
 #: audits/signal_handlers/login_log.py:41 authentication/views/dingtalk.py:161
 #: authentication/views/login.py:83 notifications/backends/__init__.py:12
-#: settings/serializers/auth/dingtalk.py:10 users/models/user.py:750
-#: users/models/user.py:860
+#: settings/serializers/auth/dingtalk.py:10 users/models/user.py:760
+#: users/models/user.py:870
 msgid "DingTalk"
 msgstr "DingTalk"
 
@@ -2723,29 +2723,29 @@ msgstr "パラメータの値には必ず %s が含まれます"
 msgid "This action require verify your MFA"
 msgstr "この操作には、MFAを検証する必要があります"
 
-#: authentication/api/connection_token.py:260
+#: authentication/api/connection_token.py:265
 msgid "Reusable connection token is not allowed, global setting not enabled"
 msgstr ""
 "再使用可能な接続トークンの使用は許可されていません。グローバル設定は有効に"
 "なっていません"
 
-#: authentication/api/connection_token.py:374
+#: authentication/api/connection_token.py:379
 msgid "Anonymous account is not supported for this asset"
 msgstr "匿名アカウントはこのプロパティではサポートされていません"
 
-#: authentication/api/connection_token.py:394
+#: authentication/api/connection_token.py:399
 msgid "Account not found"
 msgstr "アカウントが見つかりません"
 
-#: authentication/api/connection_token.py:397
+#: authentication/api/connection_token.py:402
 msgid "Permission expired"
 msgstr "承認の有効期限が切れています"
 
-#: authentication/api/connection_token.py:430
+#: authentication/api/connection_token.py:435
 msgid "ACL action is reject: {}({})"
 msgstr "ACL アクションは拒否です: {}({})"
 
-#: authentication/api/connection_token.py:434
+#: authentication/api/connection_token.py:439
 msgid "ACL action is review"
 msgstr "ACL アクションはレビューです"
 
@@ -2948,19 +2948,19 @@ msgstr "受け入れのためのログイン確認チケットを待つ"
 msgid "Login confirm ticket was {}"
 msgstr "ログイン確認チケットは {} でした"
 
-#: authentication/errors/failed.py:145
+#: authentication/errors/failed.py:149
 msgid "Current IP and Time period is not allowed"
 msgstr "現在の IP と期間はログインを許可されていません"
 
-#: authentication/errors/failed.py:150
+#: authentication/errors/failed.py:154
 msgid "Please enter MFA code"
 msgstr "MFAコードを入力してください"
 
-#: authentication/errors/failed.py:155
+#: authentication/errors/failed.py:159
 msgid "Please enter SMS code"
 msgstr "SMSコードを入力してください"
 
-#: authentication/errors/failed.py:160 users/exceptions.py:15
+#: authentication/errors/failed.py:164 users/exceptions.py:15
 msgid "Phone not set"
 msgstr "電話が設定されていない"
 
@@ -3190,27 +3190,27 @@ msgstr "接続トークンを再利用できます"
 msgid "Connection token"
 msgstr "接続トークン"
 
-#: authentication/models/connection_token.py:115
+#: authentication/models/connection_token.py:118
 msgid "Connection token inactive"
 msgstr "接続トークンがアクティブ化されていません"
 
-#: authentication/models/connection_token.py:119
+#: authentication/models/connection_token.py:122
 msgid "Connection token expired at: {}"
 msgstr "接続トークンの有効期限: {}"
 
-#: authentication/models/connection_token.py:122
+#: authentication/models/connection_token.py:125
 msgid "No user or invalid user"
 msgstr "ユーザーなしまたは期限切れのユーザー"
 
-#: authentication/models/connection_token.py:125
+#: authentication/models/connection_token.py:128
 msgid "No asset or inactive asset"
 msgstr "アセットがないか、有効化されていないアセット"
 
-#: authentication/models/connection_token.py:269
+#: authentication/models/connection_token.py:272
 msgid "Can view super connection token secret"
 msgstr "スーパー接続トークンのシークレットを表示できます"
 
-#: authentication/models/connection_token.py:271
+#: authentication/models/connection_token.py:274
 msgid "Super connection token"
 msgstr "スーパー接続トークン"
 
@@ -3287,7 +3287,7 @@ msgstr "アクション"
 
 #: authentication/serializers/connection_token.py:42
 #: perms/serializers/permission.py:40 perms/serializers/permission.py:60
-#: users/serializers/user.py:97 users/serializers/user.py:173
+#: users/serializers/user.py:100 users/serializers/user.py:177
 msgid "Is expired"
 msgstr "期限切れです"
 
@@ -3301,8 +3301,8 @@ msgid "Access IP"
 msgstr "Access IP"
 
 #: authentication/serializers/token.py:92 perms/serializers/permission.py:39
-#: perms/serializers/permission.py:61 users/serializers/user.py:98
-#: users/serializers/user.py:170
+#: perms/serializers/permission.py:61 users/serializers/user.py:101
+#: users/serializers/user.py:174
 msgid "Is valid"
 msgstr "有効です"
 
@@ -3327,13 +3327,13 @@ msgid "Show"
 msgstr "表示"
 
 #: authentication/templates/authentication/_access_key_modal.html:66
-#: users/const.py:42 users/models/user.py:644 users/serializers/profile.py:92
+#: users/const.py:42 users/models/user.py:654 users/serializers/profile.py:92
 #: users/templates/users/user_verify_mfa.html:36
 msgid "Disable"
 msgstr "無効化"
 
 #: authentication/templates/authentication/_access_key_modal.html:67
-#: users/const.py:43 users/models/user.py:645 users/serializers/profile.py:93
+#: users/const.py:43 users/models/user.py:655 users/serializers/profile.py:93
 #: users/templates/users/mfa_setting.html:26
 #: users/templates/users/mfa_setting.html:68
 msgid "Enable"
@@ -3545,7 +3545,7 @@ msgid "Do you want to retry ?"
 msgstr "再試行しますか?"
 
 #: authentication/utils.py:24 common/utils/ip/geoip/utils.py:24
-#: xpack/plugins/cloud/const.py:32
+#: xpack/plugins/cloud/const.py:33
 msgid "LAN"
 msgstr "ローカルエリアネットワーク"
 
@@ -3811,7 +3811,7 @@ msgstr "は破棄されます"
 msgid "discard time"
 msgstr "時間を捨てる"
 
-#: common/db/models.py:33 users/models/user.py:848
+#: common/db/models.py:33 users/models/user.py:858
 msgid "Updated by"
 msgstr "によって更新"
 
@@ -4137,16 +4137,23 @@ msgstr "タスクは存在しません"
 msgid "Task {} args or kwargs error"
 msgstr "タスク実行パラメータエラー"
 
+#: ops/api/job.py:81
+#, python-brace-format
 msgid ""
 "Asset ({asset}) must have at least one of the following protocols added: "
 "SSH, SFTP, or WinRM"
 msgstr ""
-"資産({asset})には、少なくともSSH、SFTP、WinRMのいずれか一つのプロトコルを追加す"
-"る必要があります"
+"資産({asset})には、少なくともSSH、SFTP、WinRMのいずれか一つのプロトコルを追加"
+"する必要があります"
 
+#: ops/api/job.py:82
+#, python-brace-format
 msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
-msgstr "資産({asset})の認証にはSSH、SFTP、またはWinRMプロトコルが不足しています"
+msgstr ""
+"資産({asset})の認証にはSSH、SFTP、またはWinRMプロトコルが不足しています"
 
+#: ops/api/job.py:83
+#, python-brace-format
 msgid "Asset ({asset}) authorization lacks upload permissions"
 msgstr "資産({asset})の認証にはアップロード権限が不足しています"
 
@@ -4827,7 +4834,7 @@ msgid "Scope"
 msgstr "スコープ"
 
 #: rbac/models/role.py:46 rbac/models/rolebinding.py:52
-#: users/models/user.py:814
+#: users/models/user.py:824
 msgid "Role"
 msgstr "ロール"
 
@@ -4839,26 +4846,26 @@ msgstr "システムの役割"
 msgid "Organization role"
 msgstr "組織の役割"
 
-#: rbac/models/rolebinding.py:61
+#: rbac/models/rolebinding.py:62
 msgid "Role binding"
 msgstr "ロールバインディング"
 
-#: rbac/models/rolebinding.py:160
+#: rbac/models/rolebinding.py:161
 msgid "All organizations"
 msgstr "全ての組織"
 
-#: rbac/models/rolebinding.py:192
+#: rbac/models/rolebinding.py:193
 msgid ""
 "User last role in org, can not be delete, you can remove user from org "
 "instead"
 msgstr ""
 "ユーザーの最後のロールは削除できません。ユーザーを組織から削除できます。"
 
-#: rbac/models/rolebinding.py:199
+#: rbac/models/rolebinding.py:200
 msgid "Organization role binding"
 msgstr "組織の役割バインディング"
 
-#: rbac/models/rolebinding.py:214
+#: rbac/models/rolebinding.py:215
 msgid "System role binding"
 msgstr "システムロールバインディング"
 
@@ -6638,6 +6645,12 @@ msgstr "データベース クライアント"
 msgid "Remote Desktop"
 msgstr "リモートデスクトップ"
 
+#: terminal/connect_methods.py:37
+#, fuzzy
+#| msgid "DB Guide"
+msgid "RDP Guide"
+msgstr "DB 接続ウィザード"
+
 #: terminal/const.py:12
 msgid "Review & Reject"
 msgstr "レビューと拒否"
@@ -7343,7 +7356,7 @@ msgstr "エンドポイントサフィックス"
 msgid "HOST"
 msgstr "ホスト"
 
-#: terminal/serializers/storage.py:146 users/models/user.py:834
+#: terminal/serializers/storage.py:146 users/models/user.py:844
 #: xpack/plugins/cloud/serializers/account_attrs.py:213
 msgid "Private key"
 msgstr "ssh秘密鍵"
@@ -7903,11 +7916,11 @@ msgstr "無効な承認アクション"
 msgid "This user is not authorized to approve this ticket"
 msgstr "このユーザーはこの作業指示を承認する権限がありません"
 
-#: users/api/user.py:136
+#: users/api/user.py:155
 msgid "Can not invite self"
 msgstr "自分自身を招待することはできません"
 
-#: users/api/user.py:189
+#: users/api/user.py:208
 msgid "Could not reset self otp, use profile reset instead"
 msgstr "自己otpをリセットできませんでした、代わりにプロファイルリセットを使用"
 
@@ -8058,7 +8071,7 @@ msgstr "公開鍵は古いものと同じであってはなりません。"
 msgid "Not a valid ssh public key"
 msgstr "有効なssh公開鍵ではありません"
 
-#: users/forms/profile.py:173 users/models/user.py:837
+#: users/forms/profile.py:173 users/models/user.py:847
 #: xpack/plugins/cloud/serializers/account_attrs.py:210
 msgid "Public key"
 msgstr "公開キー"
@@ -8067,78 +8080,78 @@ msgstr "公開キー"
 msgid "Preference"
 msgstr "ユーザー設定"
 
-#: users/models/user.py:646 users/serializers/profile.py:94
+#: users/models/user.py:656 users/serializers/profile.py:94
 msgid "Force enable"
 msgstr "強制有効"
 
-#: users/models/user.py:752
+#: users/models/user.py:762
 msgid "Lark"
 msgstr ""
 
-#: users/models/user.py:816 users/serializers/user.py:171
+#: users/models/user.py:826 users/serializers/user.py:175
 msgid "Is service account"
 msgstr "サービスアカウントです"
 
-#: users/models/user.py:818
+#: users/models/user.py:828
 msgid "Avatar"
 msgstr "アバター"
 
-#: users/models/user.py:821
+#: users/models/user.py:831
 msgid "Wechat"
 msgstr "微信"
 
-#: users/models/user.py:824 users/serializers/user.py:108
+#: users/models/user.py:834 users/serializers/user.py:111
 msgid "Phone"
 msgstr "電話"
 
-#: users/models/user.py:830
+#: users/models/user.py:840
 msgid "OTP secret key"
 msgstr "OTP 秘密"
 
 # msgid "Private key"
 # msgstr "ssh秘密鍵"
-#: users/models/user.py:842 users/serializers/profile.py:128
-#: users/serializers/user.py:168
+#: users/models/user.py:852 users/serializers/profile.py:128
+#: users/serializers/user.py:172
 msgid "Is first login"
 msgstr "最初のログインです"
 
-#: users/models/user.py:852
+#: users/models/user.py:862
 msgid "Date password last updated"
 msgstr "最終更新日パスワード"
 
-#: users/models/user.py:855
+#: users/models/user.py:865
 msgid "Need update password"
 msgstr "更新パスワードが必要"
 
-#: users/models/user.py:857
+#: users/models/user.py:867
 msgid "Date api key used"
 msgstr "Api key 最後に使用した日付"
 
-#: users/models/user.py:990
+#: users/models/user.py:1000
 msgid "Can not delete admin user"
 msgstr "管理者ユーザーを削除できませんでした"
 
-#: users/models/user.py:1018
+#: users/models/user.py:1028
 msgid "Can invite user"
 msgstr "ユーザーを招待できます"
 
-#: users/models/user.py:1019
+#: users/models/user.py:1029
 msgid "Can remove user"
 msgstr "ユーザーを削除できます"
 
-#: users/models/user.py:1020
+#: users/models/user.py:1030
 msgid "Can match user"
 msgstr "ユーザーに一致できます"
 
-#: users/models/user.py:1029
+#: users/models/user.py:1039
 msgid "Administrator"
 msgstr "管理者"
 
-#: users/models/user.py:1032
+#: users/models/user.py:1042
 msgid "Administrator is the super user of system"
 msgstr "管理者はシステムのスーパーユーザーです"
 
-#: users/models/user.py:1057
+#: users/models/user.py:1067
 msgid "User password history"
 msgstr "ユーザーパスワード履歴"
 
@@ -8272,67 +8285,71 @@ msgstr "パスワードがセキュリティルールと一致しない"
 msgid "The new password cannot be the last {} passwords"
 msgstr "新しいパスワードを最後の {} 個のパスワードにすることはできません"
 
-#: users/serializers/user.py:42
+#: users/serializers/user.py:44
 msgid "System roles"
 msgstr "システムの役割"
 
-#: users/serializers/user.py:46
+#: users/serializers/user.py:48
 msgid "Org roles"
 msgstr "組織ロール"
 
-#: users/serializers/user.py:90
+#: users/serializers/user.py:51
+msgid "Organizations and roles"
+msgstr "そしきとやくわり"
+
+#: users/serializers/user.py:93
 msgid "Password strategy"
 msgstr "パスワード戦略"
 
-#: users/serializers/user.py:92
+#: users/serializers/user.py:95
 msgid "MFA enabled"
 msgstr "MFA有効化"
 
-#: users/serializers/user.py:94
+#: users/serializers/user.py:97
 msgid "MFA force enabled"
 msgstr "MFAフォース有効化"
 
-#: users/serializers/user.py:96
+#: users/serializers/user.py:99
 msgid "Login blocked"
 msgstr "ログインがロックされました"
 
-#: users/serializers/user.py:99 users/serializers/user.py:177
+#: users/serializers/user.py:102 users/serializers/user.py:181
 msgid "Is OTP bound"
 msgstr "仮想MFAがバインドされているか"
 
-#: users/serializers/user.py:100
+#: users/serializers/user.py:103
 msgid "Super Administrator"
 msgstr "スーパーアドミニストレーター"
 
-#: users/serializers/user.py:101
+#: users/serializers/user.py:104
 msgid "Organization Administrator"
 msgstr "組織管理者"
 
-#: users/serializers/user.py:103
+#: users/serializers/user.py:106
 msgid "Can public key authentication"
 msgstr "公開鍵認証が可能"
 
-#: users/serializers/user.py:172
+#: users/serializers/user.py:176
 msgid "Is org admin"
 msgstr "組織管理者です"
 
-#: users/serializers/user.py:174
+#: users/serializers/user.py:178
 msgid "Avatar url"
 msgstr "アバターURL"
 
-#: users/serializers/user.py:178
+#: users/serializers/user.py:182
 msgid "MFA level"
 msgstr "MFA レベル"
 
-#: users/serializers/user.py:289
+#: users/serializers/user.py:304
 msgid "Select users"
 msgstr "ユーザーの選択"
 
-#: users/serializers/user.py:290
+#: users/serializers/user.py:305
 msgid "For security, only list several users"
 msgstr "セキュリティのために、複数のユーザーのみをリストします"
 
-#: users/serializers/user.py:323
+#: users/serializers/user.py:338
 msgid "name not unique"
 msgstr "名前が一意ではない"
 
@@ -8640,11 +8657,11 @@ msgid ""
 "The current task is not synchronized with unmatched policy assets, skipping"
 msgstr ""
 
-#: xpack/plugins/cloud/api.py:58
+#: xpack/plugins/cloud/api.py:60
 msgid "Test connection successful"
 msgstr "テスト接続成功"
 
-#: xpack/plugins/cloud/api.py:60
+#: xpack/plugins/cloud/api.py:62
 msgid "Test connection failed: {}"
 msgstr "テスト接続に失敗しました: {}"
 
@@ -8696,87 +8713,91 @@ msgstr "谷歌雲"
 msgid "UCloud"
 msgstr "ucloud"
 
-#: xpack/plugins/cloud/const.py:22
+#: xpack/plugins/cloud/const.py:21
+msgid "Volcengine"
+msgstr ""
+
+#: xpack/plugins/cloud/const.py:23
 msgid "VMware"
 msgstr "VMware"
 
-#: xpack/plugins/cloud/const.py:23 xpack/plugins/cloud/providers/nutanix.py:15
+#: xpack/plugins/cloud/const.py:24 xpack/plugins/cloud/providers/nutanix.py:15
 msgid "Nutanix"
 msgstr "Nutanix"
 
-#: xpack/plugins/cloud/const.py:24
+#: xpack/plugins/cloud/const.py:25
 msgid "Huawei Private Cloud"
 msgstr "華為私有雲"
 
-#: xpack/plugins/cloud/const.py:25
+#: xpack/plugins/cloud/const.py:26
 msgid "Qingyun Private Cloud"
 msgstr "青雲私有雲"
 
-#: xpack/plugins/cloud/const.py:26
+#: xpack/plugins/cloud/const.py:27
 msgid "CTYun Private Cloud"
 msgstr "スカイウィング私有雲"
 
-#: xpack/plugins/cloud/const.py:27
+#: xpack/plugins/cloud/const.py:28
 msgid "OpenStack"
 msgstr "OpenStack"
 
-#: xpack/plugins/cloud/const.py:28 xpack/plugins/cloud/providers/zstack.py:21
+#: xpack/plugins/cloud/const.py:29 xpack/plugins/cloud/providers/zstack.py:21
 msgid "ZStack"
 msgstr "ZStack"
 
-#: xpack/plugins/cloud/const.py:29
+#: xpack/plugins/cloud/const.py:30
 msgid "Fusion Compute"
 msgstr "融合計算"
 
-#: xpack/plugins/cloud/const.py:30
+#: xpack/plugins/cloud/const.py:31
 msgid "SCP"
 msgstr "SCP"
 
-#: xpack/plugins/cloud/const.py:31
+#: xpack/plugins/cloud/const.py:32
 msgid "Apsara Stack"
 msgstr "Apsara Stack"
 
-#: xpack/plugins/cloud/const.py:36
+#: xpack/plugins/cloud/const.py:37
 msgid "Private IP"
 msgstr "プライベートIP"
 
-#: xpack/plugins/cloud/const.py:37
+#: xpack/plugins/cloud/const.py:38
 msgid "Public IP"
 msgstr "パブリックIP"
 
-#: xpack/plugins/cloud/const.py:41 xpack/plugins/cloud/models.py:299
+#: xpack/plugins/cloud/const.py:42 xpack/plugins/cloud/models.py:299
 msgid "Instance name"
 msgstr "インスタンス名"
 
-#: xpack/plugins/cloud/const.py:42
+#: xpack/plugins/cloud/const.py:43
 msgid "Instance name and Partial IP"
 msgstr "インスタンス名と部分IP"
 
-#: xpack/plugins/cloud/const.py:47
+#: xpack/plugins/cloud/const.py:48
 msgid "Succeed"
 msgstr "成功"
 
-#: xpack/plugins/cloud/const.py:51
+#: xpack/plugins/cloud/const.py:52
 msgid "Unsync"
 msgstr "同期していません"
 
-#: xpack/plugins/cloud/const.py:52
+#: xpack/plugins/cloud/const.py:53
 msgid "New Sync"
 msgstr "新しい同期"
 
-#: xpack/plugins/cloud/const.py:53
+#: xpack/plugins/cloud/const.py:54
 msgid "Synced"
 msgstr "同期済み"
 
-#: xpack/plugins/cloud/const.py:54
+#: xpack/plugins/cloud/const.py:55
 msgid "Released"
 msgstr "リリース済み"
 
-#: xpack/plugins/cloud/const.py:58
+#: xpack/plugins/cloud/const.py:59
 msgid "And"
 msgstr "そして"
 
-#: xpack/plugins/cloud/const.py:59
+#: xpack/plugins/cloud/const.py:60
 msgid "Or"
 msgstr "または"
 
@@ -9133,11 +9154,11 @@ msgstr "TR-Istanbul"
 msgid "CN East-Suqian"
 msgstr "華東-宿遷"
 
-#: xpack/plugins/cloud/serializers/account.py:68
+#: xpack/plugins/cloud/serializers/account.py:69
 msgid "Validity display"
 msgstr "有効表示"
 
-#: xpack/plugins/cloud/serializers/account.py:69
+#: xpack/plugins/cloud/serializers/account.py:70
 msgid "Provider display"
 msgstr "プロバイダ表示"
 
diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po
index 9698cbb94..2227bbfa2 100644
--- a/apps/locale/zh/LC_MESSAGES/django.po
+++ b/apps/locale/zh/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JumpServer 0.3.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-04-07 14:23+0800\n"
+"POT-Creation-Date: 2024-04-09 15:39+0800\n"
 "PO-Revision-Date: 2021-05-20 10:54+0800\n"
 "Last-Translator: ibuler <ibuler@qq.com>\n"
 "Language-Team: JumpServer team<ibuler@qq.com>\n"
@@ -35,7 +35,7 @@ msgstr "成功: %s, 失败: %s, 总数: %s"
 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47
 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123
 #: terminal/serializers/storage.py:142 users/forms/profile.py:22
-#: users/serializers/user.py:106
+#: users/serializers/user.py:109
 #: users/templates/users/_msg_user_created.html:13
 #: users/templates/users/user_password_verify.html:18
 #: xpack/plugins/cloud/serializers/account_attrs.py:28
@@ -79,7 +79,7 @@ msgstr "同名账号"
 msgid "Anonymous account"
 msgstr "匿名账号"
 
-#: accounts/const/account.py:25 users/models/user.py:742
+#: accounts/const/account.py:25 users/models/user.py:752
 msgid "Local"
 msgstr "数据库"
 
@@ -104,7 +104,7 @@ msgstr "更新"
 #: accounts/const/account.py:33 accounts/const/automation.py:109
 #: accounts/serializers/automations/change_secret.py:164 audits/const.py:62
 #: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19
-#: ops/const.py:76 terminal/const.py:79 xpack/plugins/cloud/const.py:46
+#: ops/const.py:76 terminal/const.py:79 xpack/plugins/cloud/const.py:47
 msgid "Failed"
 msgstr "失败"
 
@@ -206,7 +206,7 @@ msgstr "仅创建"
 #: authentication/serializers/password_mfa.py:24
 #: notifications/backends/__init__.py:10 settings/serializers/msg.py:22
 #: settings/serializers/msg.py:64 users/forms/profile.py:102
-#: users/forms/profile.py:109 users/models/user.py:806
+#: users/forms/profile.py:109 users/models/user.py:816
 #: users/templates/users/forgot_password.html:160
 #: users/views/profile/reset.py:94
 msgid "Email"
@@ -294,7 +294,7 @@ msgid "Version"
 msgstr "版本"
 
 #: accounts/models/account.py:57 accounts/serializers/account/account.py:215
-#: users/models/user.py:849
+#: users/models/user.py:859
 msgid "Source"
 msgstr "来源"
 
@@ -308,7 +308,7 @@ msgstr "来源 ID"
 #: accounts/templates/accounts/change_secret_failed_info.html:12
 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7
 #: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28
-#: audits/models.py:59 authentication/api/connection_token.py:406
+#: audits/models.py:59 authentication/api/connection_token.py:411
 #: ops/models/base.py:18 perms/models/asset_permission.py:75
 #: perms/serializers/permission.py:41 settings/serializers/msg.py:33
 #: terminal/backends/command/models.py:18 terminal/models/session/session.py:34
@@ -541,7 +541,7 @@ msgstr "最后登录日期"
 #: authentication/templates/authentication/_msg_different_city.html:9
 #: authentication/templates/authentication/_msg_oauth_bind.html:9
 #: terminal/serializers/storage.py:136 users/forms/profile.py:32
-#: users/forms/profile.py:115 users/models/user.py:802
+#: users/forms/profile.py:115 users/models/user.py:812
 #: users/templates/users/_msg_user_created.html:12
 #: xpack/plugins/cloud/serializers/account_attrs.py:26
 msgid "Username"
@@ -637,7 +637,7 @@ msgstr "密码规则"
 #: terminal/models/virtualapp/provider.py:10
 #: terminal/models/virtualapp/virtualapp.py:19 tickets/api/ticket.py:87
 #: users/forms/profile.py:33 users/models/group.py:13
-#: users/models/preference.py:11 users/models/user.py:804
+#: users/models/preference.py:11 users/models/user.py:814
 #: xpack/plugins/cloud/models.py:32 xpack/plugins/cloud/models.py:272
 #: xpack/plugins/cloud/serializers/task.py:70
 msgid "Name"
@@ -653,7 +653,7 @@ msgstr "特权账号"
 #: authentication/serializers/connect_token_secret.py:117
 #: terminal/models/applet/applet.py:40
 #: terminal/models/component/endpoint.py:120
-#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:169
+#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:173
 msgid "Is active"
 msgstr "激活"
 
@@ -819,7 +819,7 @@ msgstr "已修改"
 #: acls/templates/acls/asset_login_reminder.html:6
 #: assets/models/automations/base.py:19
 #: assets/serializers/automations/base.py:20
-#: authentication/api/connection_token.py:405 ops/models/base.py:17
+#: authentication/api/connection_token.py:410 ops/models/base.py:17
 #: ops/models/job.py:147 ops/serializers/job.py:19
 #: terminal/templates/terminal/_msg_command_execute_alert.html:16
 msgid "Assets"
@@ -861,8 +861,8 @@ msgstr "ID"
 #: terminal/notifications.py:205 terminal/serializers/command.py:16
 #: terminal/templates/terminal/_msg_command_warning.html:6
 #: terminal/templates/terminal/_msg_session_sharing.html:6
-#: tickets/models/comment.py:21 users/const.py:14 users/models/user.py:1009
-#: users/models/user.py:1047 users/serializers/group.py:21
+#: tickets/models/comment.py:21 users/const.py:14 users/models/user.py:1019
+#: users/models/user.py:1057 users/serializers/group.py:21
 msgid "User"
 msgstr "用户"
 
@@ -958,7 +958,7 @@ msgstr "关联平台,可配置推送参数,如果不关联,将使用默认
 #: terminal/models/component/endpoint.py:119
 #: terminal/models/session/session.py:47
 #: terminal/models/virtualapp/virtualapp.py:28 tickets/models/comment.py:32
-#: tickets/models/ticket/general.py:294 users/models/user.py:840
+#: tickets/models/ticket/general.py:294 users/models/user.py:850
 #: xpack/plugins/cloud/models.py:39 xpack/plugins/cloud/models.py:106
 msgid "Comment"
 msgstr "备注"
@@ -1342,7 +1342,7 @@ msgid "Applications"
 msgstr "应用管理"
 
 #: applications/models.py:16 xpack/plugins/cloud/models.py:37
-#: xpack/plugins/cloud/serializers/account.py:67
+#: xpack/plugins/cloud/serializers/account.py:68
 msgid "Attrs"
 msgstr "属性"
 
@@ -1391,7 +1391,7 @@ msgid "  - Platform {} ansible disabled"
 msgstr "  - 平台 {} Ansible 已禁用, 无法执行任务"
 
 #: assets/automations/ping_gateway/manager.py:33
-#: authentication/models/connection_token.py:128
+#: authentication/models/connection_token.py:131
 msgid "No account"
 msgstr "没有账号"
 
@@ -1674,18 +1674,18 @@ msgstr "SSH公钥"
 #: assets/models/_user.py:28 assets/models/automations/base.py:114
 #: assets/models/cmd_filter.py:41 assets/models/group.py:19
 #: audits/models.py:267 common/db/models.py:34 ops/models/base.py:54
-#: ops/models/job.py:235 users/models/user.py:1048
+#: ops/models/job.py:235 users/models/user.py:1058
 msgid "Date created"
 msgstr "创建日期"
 
 #: assets/models/_user.py:29 assets/models/cmd_filter.py:42
-#: common/db/models.py:35 users/models/user.py:858
+#: common/db/models.py:35 users/models/user.py:868
 msgid "Date updated"
 msgstr "更新日期"
 
 #: assets/models/_user.py:30 assets/models/cmd_filter.py:44
 #: assets/models/cmd_filter.py:91 assets/models/group.py:18
-#: common/db/models.py:32 users/models/user.py:847
+#: common/db/models.py:32 users/models/user.py:857
 #: users/serializers/group.py:32
 msgid "Created by"
 msgstr "创建者"
@@ -1874,7 +1874,7 @@ msgstr "校验日期"
 
 #: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:66
 #: perms/serializers/permission.py:34 users/models/group.py:25
-#: users/models/user.py:810
+#: users/models/user.py:820
 msgid "User group"
 msgstr "用户组"
 
@@ -1924,7 +1924,7 @@ msgstr "默认"
 msgid "Default asset group"
 msgstr "默认资产组"
 
-#: assets/models/label.py:15 rbac/const.py:6 users/models/user.py:1033
+#: assets/models/label.py:15 rbac/const.py:6 users/models/user.py:1043
 msgid "System"
 msgstr "系统"
 
@@ -2565,7 +2565,7 @@ msgstr "登录 IP"
 
 #: audits/models.py:200 audits/serializers.py:52
 #: authentication/templates/authentication/_mfa_confirm_modal.html:14
-#: users/forms/profile.py:65 users/models/user.py:827
+#: users/forms/profile.py:65 users/models/user.py:837
 #: users/serializers/profile.py:102
 msgid "MFA"
 msgstr "MFA"
@@ -2614,7 +2614,7 @@ msgstr "用户 %s %s 了当前资源"
 #: audits/serializers.py:172 authentication/models/connection_token.py:47
 #: authentication/models/temp_token.py:13 perms/models/asset_permission.py:80
 #: tickets/models/ticket/apply_application.py:31
-#: tickets/models/ticket/apply_asset.py:20 users/models/user.py:845
+#: tickets/models/ticket/apply_asset.py:20 users/models/user.py:855
 msgid "Date expired"
 msgstr "失效日期"
 
@@ -2647,29 +2647,29 @@ msgstr "认证令牌"
 
 #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73
 #: authentication/views/login.py:77 notifications/backends/__init__.py:11
-#: settings/serializers/auth/wecom.py:10 users/models/user.py:749
-#: users/models/user.py:859
+#: settings/serializers/auth/wecom.py:10 users/models/user.py:759
+#: users/models/user.py:869
 msgid "WeCom"
 msgstr "企业微信"
 
 #: audits/signal_handlers/login_log.py:38 authentication/views/feishu.py:105
 #: authentication/views/login.py:89 notifications/backends/__init__.py:14
-#: settings/serializers/auth/feishu.py:10 users/models/user.py:751
-#: users/models/user.py:861
+#: settings/serializers/auth/feishu.py:10 users/models/user.py:761
+#: users/models/user.py:871
 msgid "FeiShu"
 msgstr "飞书"
 
 #: audits/signal_handlers/login_log.py:40 authentication/views/login.py:101
 #: authentication/views/slack.py:87 notifications/backends/__init__.py:16
-#: settings/serializers/auth/slack.py:10 users/models/user.py:753
-#: users/models/user.py:863
+#: settings/serializers/auth/slack.py:10 users/models/user.py:763
+#: users/models/user.py:873
 msgid "Slack"
 msgstr ""
 
 #: audits/signal_handlers/login_log.py:41 authentication/views/dingtalk.py:161
 #: authentication/views/login.py:83 notifications/backends/__init__.py:12
-#: settings/serializers/auth/dingtalk.py:10 users/models/user.py:750
-#: users/models/user.py:860
+#: settings/serializers/auth/dingtalk.py:10 users/models/user.py:760
+#: users/models/user.py:870
 msgid "DingTalk"
 msgstr "钉钉"
 
@@ -2704,27 +2704,27 @@ msgstr "参数中的值必须包含 %s"
 msgid "This action require verify your MFA"
 msgstr "该操作需要验证您的 MFA, 请先开启并配置"
 
-#: authentication/api/connection_token.py:260
+#: authentication/api/connection_token.py:265
 msgid "Reusable connection token is not allowed, global setting not enabled"
 msgstr "不允许使用可重复使用的连接令牌,未启用全局设置"
 
-#: authentication/api/connection_token.py:374
+#: authentication/api/connection_token.py:379
 msgid "Anonymous account is not supported for this asset"
 msgstr "匿名账号不支持当前资产"
 
-#: authentication/api/connection_token.py:394
+#: authentication/api/connection_token.py:399
 msgid "Account not found"
 msgstr "账号未找到"
 
-#: authentication/api/connection_token.py:397
+#: authentication/api/connection_token.py:402
 msgid "Permission expired"
 msgstr "授权已过期"
 
-#: authentication/api/connection_token.py:430
+#: authentication/api/connection_token.py:435
 msgid "ACL action is reject: {}({})"
 msgstr "ACL 动作是拒绝: {}({})"
 
-#: authentication/api/connection_token.py:434
+#: authentication/api/connection_token.py:439
 msgid "ACL action is review"
 msgstr "ACL 动作是复核"
 
@@ -2918,19 +2918,19 @@ msgstr "等待登录复核处理"
 msgid "Login confirm ticket was {}"
 msgstr "登录复核: {}"
 
-#: authentication/errors/failed.py:145
+#: authentication/errors/failed.py:149
 msgid "Current IP and Time period is not allowed"
 msgstr "当前 IP 和时间段不被允许登录"
 
-#: authentication/errors/failed.py:150
+#: authentication/errors/failed.py:154
 msgid "Please enter MFA code"
 msgstr "请输入 MFA 验证码"
 
-#: authentication/errors/failed.py:155
+#: authentication/errors/failed.py:159
 msgid "Please enter SMS code"
 msgstr "请输入短信验证码"
 
-#: authentication/errors/failed.py:160 users/exceptions.py:15
+#: authentication/errors/failed.py:164 users/exceptions.py:15
 msgid "Phone not set"
 msgstr "手机号没有设置"
 
@@ -3156,27 +3156,27 @@ msgstr "可以复用连接令牌"
 msgid "Connection token"
 msgstr "连接令牌"
 
-#: authentication/models/connection_token.py:115
+#: authentication/models/connection_token.py:118
 msgid "Connection token inactive"
 msgstr "连接令牌未激活"
 
-#: authentication/models/connection_token.py:119
+#: authentication/models/connection_token.py:122
 msgid "Connection token expired at: {}"
 msgstr "连接令牌过期: {}"
 
-#: authentication/models/connection_token.py:122
+#: authentication/models/connection_token.py:125
 msgid "No user or invalid user"
 msgstr "没有用户或用户失效"
 
-#: authentication/models/connection_token.py:125
+#: authentication/models/connection_token.py:128
 msgid "No asset or inactive asset"
 msgstr "没有资产或资产未激活"
 
-#: authentication/models/connection_token.py:269
+#: authentication/models/connection_token.py:272
 msgid "Can view super connection token secret"
 msgstr "可以查看超级连接令牌密文"
 
-#: authentication/models/connection_token.py:271
+#: authentication/models/connection_token.py:274
 msgid "Super connection token"
 msgstr "超级连接令牌"
 
@@ -3253,7 +3253,7 @@ msgstr "动作"
 
 #: authentication/serializers/connection_token.py:42
 #: perms/serializers/permission.py:40 perms/serializers/permission.py:60
-#: users/serializers/user.py:97 users/serializers/user.py:173
+#: users/serializers/user.py:100 users/serializers/user.py:177
 msgid "Is expired"
 msgstr "已过期"
 
@@ -3267,8 +3267,8 @@ msgid "Access IP"
 msgstr "IP 白名单"
 
 #: authentication/serializers/token.py:92 perms/serializers/permission.py:39
-#: perms/serializers/permission.py:61 users/serializers/user.py:98
-#: users/serializers/user.py:170
+#: perms/serializers/permission.py:61 users/serializers/user.py:101
+#: users/serializers/user.py:174
 msgid "Is valid"
 msgstr "是否有效"
 
@@ -3293,13 +3293,13 @@ msgid "Show"
 msgstr "显示"
 
 #: authentication/templates/authentication/_access_key_modal.html:66
-#: users/const.py:42 users/models/user.py:644 users/serializers/profile.py:92
+#: users/const.py:42 users/models/user.py:654 users/serializers/profile.py:92
 #: users/templates/users/user_verify_mfa.html:36
 msgid "Disable"
 msgstr "禁用"
 
 #: authentication/templates/authentication/_access_key_modal.html:67
-#: users/const.py:43 users/models/user.py:645 users/serializers/profile.py:93
+#: users/const.py:43 users/models/user.py:655 users/serializers/profile.py:93
 #: users/templates/users/mfa_setting.html:26
 #: users/templates/users/mfa_setting.html:68
 msgid "Enable"
@@ -3499,7 +3499,7 @@ msgid "Do you want to retry ?"
 msgstr "是否重试 ?"
 
 #: authentication/utils.py:24 common/utils/ip/geoip/utils.py:24
-#: xpack/plugins/cloud/const.py:32
+#: xpack/plugins/cloud/const.py:33
 msgid "LAN"
 msgstr "局域网"
 
@@ -3765,7 +3765,7 @@ msgstr "忽略的"
 msgid "discard time"
 msgstr "忽略时间"
 
-#: common/db/models.py:33 users/models/user.py:848
+#: common/db/models.py:33 users/models/user.py:858
 msgid "Updated by"
 msgstr "最后更新者"
 
@@ -4086,14 +4086,20 @@ msgstr "任务 {} 不存在"
 msgid "Task {} args or kwargs error"
 msgstr "任务 {} 执行参数错误"
 
+#: ops/api/job.py:81
+#, python-brace-format
 msgid ""
 "Asset ({asset}) must have at least one of the following protocols added: "
 "SSH, SFTP, or WinRM"
 msgstr "资产({asset})至少要添加ssh,sftp,winrm其中一种协议"
 
+#: ops/api/job.py:82
+#, python-brace-format
 msgid "Asset ({asset}) authorization is missing SSH, SFTP, or WinRM protocol"
 msgstr "资产({asset})授权缺少ssh,sftp或winrm协议"
 
+#: ops/api/job.py:83
+#, python-brace-format
 msgid "Asset ({asset}) authorization lacks upload permissions"
 msgstr "资产({asset})授权缺少上传权限"
 
@@ -4771,7 +4777,7 @@ msgid "Scope"
 msgstr "范围"
 
 #: rbac/models/role.py:46 rbac/models/rolebinding.py:52
-#: users/models/user.py:814
+#: users/models/user.py:824
 msgid "Role"
 msgstr "角色"
 
@@ -4783,25 +4789,25 @@ msgstr "系统角色"
 msgid "Organization role"
 msgstr "组织角色"
 
-#: rbac/models/rolebinding.py:61
+#: rbac/models/rolebinding.py:62
 msgid "Role binding"
 msgstr "角色绑定"
 
-#: rbac/models/rolebinding.py:160
+#: rbac/models/rolebinding.py:161
 msgid "All organizations"
 msgstr "所有组织"
 
-#: rbac/models/rolebinding.py:192
+#: rbac/models/rolebinding.py:193
 msgid ""
 "User last role in org, can not be delete, you can remove user from org "
 "instead"
 msgstr "用户最后一个角色,不能删除,你可以将用户从组织移除"
 
-#: rbac/models/rolebinding.py:199
+#: rbac/models/rolebinding.py:200
 msgid "Organization role binding"
 msgstr "组织角色绑定"
 
-#: rbac/models/rolebinding.py:214
+#: rbac/models/rolebinding.py:215
 msgid "System role binding"
 msgstr "系统角色绑定"
 
@@ -6540,6 +6546,12 @@ msgstr "数据库客户端"
 msgid "Remote Desktop"
 msgstr "远程桌面客户端"
 
+#: terminal/connect_methods.py:37
+#, fuzzy
+#| msgid "DB Guide"
+msgid "RDP Guide"
+msgstr "DB 连接向导"
+
 #: terminal/const.py:12
 msgid "Review & Reject"
 msgstr "审批 & 拒绝"
@@ -7238,7 +7250,7 @@ msgstr "端点后缀"
 msgid "HOST"
 msgstr "主机"
 
-#: terminal/serializers/storage.py:146 users/models/user.py:834
+#: terminal/serializers/storage.py:146 users/models/user.py:844
 #: xpack/plugins/cloud/serializers/account_attrs.py:213
 msgid "Private key"
 msgstr "ssh私钥"
@@ -7792,11 +7804,11 @@ msgstr "无效的审批动作"
 msgid "This user is not authorized to approve this ticket"
 msgstr "此用户无权审批此工单"
 
-#: users/api/user.py:136
+#: users/api/user.py:155
 msgid "Can not invite self"
 msgstr "不能邀请自己"
 
-#: users/api/user.py:189
+#: users/api/user.py:208
 msgid "Could not reset self otp, use profile reset instead"
 msgstr "不能在该页面重置 MFA 多因子认证, 请去个人信息页面重置"
 
@@ -7947,7 +7959,7 @@ msgstr "不能和原来的密钥相同"
 msgid "Not a valid ssh public key"
 msgstr "SSH密钥不合法"
 
-#: users/forms/profile.py:173 users/models/user.py:837
+#: users/forms/profile.py:173 users/models/user.py:847
 #: xpack/plugins/cloud/serializers/account_attrs.py:210
 msgid "Public key"
 msgstr "SSH公钥"
@@ -7956,78 +7968,78 @@ msgstr "SSH公钥"
 msgid "Preference"
 msgstr "用户设置"
 
-#: users/models/user.py:646 users/serializers/profile.py:94
+#: users/models/user.py:656 users/serializers/profile.py:94
 msgid "Force enable"
 msgstr "强制启用"
 
-#: users/models/user.py:752
+#: users/models/user.py:762
 msgid "Lark"
 msgstr ""
 
-#: users/models/user.py:816 users/serializers/user.py:171
+#: users/models/user.py:826 users/serializers/user.py:175
 msgid "Is service account"
 msgstr "服务账号"
 
-#: users/models/user.py:818
+#: users/models/user.py:828
 msgid "Avatar"
 msgstr "头像"
 
-#: users/models/user.py:821
+#: users/models/user.py:831
 msgid "Wechat"
 msgstr "微信"
 
-#: users/models/user.py:824 users/serializers/user.py:108
+#: users/models/user.py:834 users/serializers/user.py:111
 msgid "Phone"
 msgstr "手机"
 
-#: users/models/user.py:830
+#: users/models/user.py:840
 msgid "OTP secret key"
 msgstr "OTP 密钥"
 
 # msgid "Private key"
 # msgstr "ssh私钥"
-#: users/models/user.py:842 users/serializers/profile.py:128
-#: users/serializers/user.py:168
+#: users/models/user.py:852 users/serializers/profile.py:128
+#: users/serializers/user.py:172
 msgid "Is first login"
 msgstr "首次登录"
 
-#: users/models/user.py:852
+#: users/models/user.py:862
 msgid "Date password last updated"
 msgstr "最后更新密码日期"
 
-#: users/models/user.py:855
+#: users/models/user.py:865
 msgid "Need update password"
 msgstr "需要更新密码"
 
-#: users/models/user.py:857
+#: users/models/user.py:867
 msgid "Date api key used"
 msgstr "Api key 最后使用日期"
 
-#: users/models/user.py:990
+#: users/models/user.py:1000
 msgid "Can not delete admin user"
 msgstr "无法删除管理员用户"
 
-#: users/models/user.py:1018
+#: users/models/user.py:1028
 msgid "Can invite user"
 msgstr "可以邀请用户"
 
-#: users/models/user.py:1019
+#: users/models/user.py:1029
 msgid "Can remove user"
 msgstr "可以移除用户"
 
-#: users/models/user.py:1020
+#: users/models/user.py:1030
 msgid "Can match user"
 msgstr "可以匹配用户"
 
-#: users/models/user.py:1029
+#: users/models/user.py:1039
 msgid "Administrator"
 msgstr "管理员"
 
-#: users/models/user.py:1032
+#: users/models/user.py:1042
 msgid "Administrator is the super user of system"
 msgstr "Administrator是初始的超级管理员"
 
-#: users/models/user.py:1057
+#: users/models/user.py:1067
 msgid "User password history"
 msgstr "用户密码历史"
 
@@ -8157,67 +8169,72 @@ msgstr "密码不满足安全规则"
 msgid "The new password cannot be the last {} passwords"
 msgstr "新密码不能是最近 {} 次的密码"
 
-#: users/serializers/user.py:42
+#: users/serializers/user.py:44
 msgid "System roles"
 msgstr "系统角色"
 
-#: users/serializers/user.py:46
+#: users/serializers/user.py:48
 msgid "Org roles"
 msgstr "组织角色"
 
-#: users/serializers/user.py:90
+#: users/serializers/user.py:51
+#| msgid "Organization role"
+msgid "Organizations and roles"
+msgstr "组织和角色"
+
+#: users/serializers/user.py:93
 msgid "Password strategy"
 msgstr "密码策略"
 
-#: users/serializers/user.py:92
+#: users/serializers/user.py:95
 msgid "MFA enabled"
 msgstr "MFA 已启用"
 
-#: users/serializers/user.py:94
+#: users/serializers/user.py:97
 msgid "MFA force enabled"
 msgstr "强制 MFA"
 
-#: users/serializers/user.py:96
+#: users/serializers/user.py:99
 msgid "Login blocked"
 msgstr "登录被锁定"
 
-#: users/serializers/user.py:99 users/serializers/user.py:177
+#: users/serializers/user.py:102 users/serializers/user.py:181
 msgid "Is OTP bound"
 msgstr "是否绑定了虚拟 MFA"
 
-#: users/serializers/user.py:100
+#: users/serializers/user.py:103
 msgid "Super Administrator"
 msgstr "超级管理员"
 
-#: users/serializers/user.py:101
+#: users/serializers/user.py:104
 msgid "Organization Administrator"
 msgstr "组织管理员"
 
-#: users/serializers/user.py:103
+#: users/serializers/user.py:106
 msgid "Can public key authentication"
 msgstr "可以使用公钥认证"
 
-#: users/serializers/user.py:172
+#: users/serializers/user.py:176
 msgid "Is org admin"
 msgstr "组织管理员"
 
-#: users/serializers/user.py:174
+#: users/serializers/user.py:178
 msgid "Avatar url"
 msgstr "头像路径"
 
-#: users/serializers/user.py:178
+#: users/serializers/user.py:182
 msgid "MFA level"
 msgstr "MFA 级别"
 
-#: users/serializers/user.py:289
+#: users/serializers/user.py:304
 msgid "Select users"
 msgstr "选择用户"
 
-#: users/serializers/user.py:290
+#: users/serializers/user.py:305
 msgid "For security, only list several users"
 msgstr "为了安全,仅列出几个用户"
 
-#: users/serializers/user.py:323
+#: users/serializers/user.py:338
 msgid "name not unique"
 msgstr "名称重复"
 
@@ -8512,11 +8529,11 @@ msgid ""
 "The current task is not synchronized with unmatched policy assets, skipping"
 msgstr ""
 
-#: xpack/plugins/cloud/api.py:58
+#: xpack/plugins/cloud/api.py:60
 msgid "Test connection successful"
 msgstr "测试成功"
 
-#: xpack/plugins/cloud/api.py:60
+#: xpack/plugins/cloud/api.py:62
 msgid "Test connection failed: {}"
 msgstr "测试连接失败:{}"
 
@@ -8568,87 +8585,91 @@ msgstr "谷歌云"
 msgid "UCloud"
 msgstr "ucloud"
 
-#: xpack/plugins/cloud/const.py:22
+#: xpack/plugins/cloud/const.py:21
+msgid "Volcengine"
+msgstr ""
+
+#: xpack/plugins/cloud/const.py:23
 msgid "VMware"
 msgstr "VMware"
 
-#: xpack/plugins/cloud/const.py:23 xpack/plugins/cloud/providers/nutanix.py:15
+#: xpack/plugins/cloud/const.py:24 xpack/plugins/cloud/providers/nutanix.py:15
 msgid "Nutanix"
 msgstr "Nutanix"
 
-#: xpack/plugins/cloud/const.py:24
+#: xpack/plugins/cloud/const.py:25
 msgid "Huawei Private Cloud"
 msgstr "华为私有云"
 
-#: xpack/plugins/cloud/const.py:25
+#: xpack/plugins/cloud/const.py:26
 msgid "Qingyun Private Cloud"
 msgstr "青云私有云"
 
-#: xpack/plugins/cloud/const.py:26
+#: xpack/plugins/cloud/const.py:27
 msgid "CTYun Private Cloud"
 msgstr "天翼私有云"
 
-#: xpack/plugins/cloud/const.py:27
+#: xpack/plugins/cloud/const.py:28
 msgid "OpenStack"
 msgstr "OpenStack"
 
-#: xpack/plugins/cloud/const.py:28 xpack/plugins/cloud/providers/zstack.py:21
+#: xpack/plugins/cloud/const.py:29 xpack/plugins/cloud/providers/zstack.py:21
 msgid "ZStack"
 msgstr "ZStack"
 
-#: xpack/plugins/cloud/const.py:29
+#: xpack/plugins/cloud/const.py:30
 msgid "Fusion Compute"
 msgstr "融合计算"
 
-#: xpack/plugins/cloud/const.py:30
+#: xpack/plugins/cloud/const.py:31
 msgid "SCP"
 msgstr "深信服SCP"
 
-#: xpack/plugins/cloud/const.py:31
+#: xpack/plugins/cloud/const.py:32
 msgid "Apsara Stack"
 msgstr "阿里云专有云"
 
-#: xpack/plugins/cloud/const.py:36
+#: xpack/plugins/cloud/const.py:37
 msgid "Private IP"
 msgstr "私有IP"
 
-#: xpack/plugins/cloud/const.py:37
+#: xpack/plugins/cloud/const.py:38
 msgid "Public IP"
 msgstr "公网IP"
 
-#: xpack/plugins/cloud/const.py:41 xpack/plugins/cloud/models.py:299
+#: xpack/plugins/cloud/const.py:42 xpack/plugins/cloud/models.py:299
 msgid "Instance name"
 msgstr "实例名称"
 
-#: xpack/plugins/cloud/const.py:42
+#: xpack/plugins/cloud/const.py:43
 msgid "Instance name and Partial IP"
 msgstr "实例名称和部分IP"
 
-#: xpack/plugins/cloud/const.py:47
+#: xpack/plugins/cloud/const.py:48
 msgid "Succeed"
 msgstr "成功"
 
-#: xpack/plugins/cloud/const.py:51
+#: xpack/plugins/cloud/const.py:52
 msgid "Unsync"
 msgstr "未同步"
 
-#: xpack/plugins/cloud/const.py:52
+#: xpack/plugins/cloud/const.py:53
 msgid "New Sync"
 msgstr "新同步"
 
-#: xpack/plugins/cloud/const.py:53
+#: xpack/plugins/cloud/const.py:54
 msgid "Synced"
 msgstr "已同步"
 
-#: xpack/plugins/cloud/const.py:54
+#: xpack/plugins/cloud/const.py:55
 msgid "Released"
 msgstr "已释放"
 
-#: xpack/plugins/cloud/const.py:58
+#: xpack/plugins/cloud/const.py:59
 msgid "And"
 msgstr "与"
 
-#: xpack/plugins/cloud/const.py:59
+#: xpack/plugins/cloud/const.py:60
 msgid "Or"
 msgstr "或"
 
@@ -9005,11 +9026,11 @@ msgstr "TR-Istanbul"
 msgid "CN East-Suqian"
 msgstr "华东-宿迁"
 
-#: xpack/plugins/cloud/serializers/account.py:68
+#: xpack/plugins/cloud/serializers/account.py:69
 msgid "Validity display"
 msgstr "有效性显示"
 
-#: xpack/plugins/cloud/serializers/account.py:69
+#: xpack/plugins/cloud/serializers/account.py:70
 msgid "Provider display"
 msgstr "服务商显示"
 
diff --git a/apps/users/api/user.py b/apps/users/api/user.py
index 7a67e9ddd..1088da6e8 100644
--- a/apps/users/api/user.py
+++ b/apps/users/api/user.py
@@ -63,11 +63,12 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV
             return super().match(request, *args, **kwargs)
 
     def get_serializer(self, *args, **kwargs):
-        """重写 get_serializer,用于设置用户的角色缓存
-        放到 paginate_queryset 里面会导致 导出有问题, 因为导出的时候,没有 pager
+        """重写 get_serializer, 用于设置用户的角色缓存
+        放到 paginate_queryset 里面会导致 导出有问题, 因为导出的时候,没有 pager
         """
         if len(args) == 1 and kwargs.get('many'):
             queryset = self.set_users_roles_for_cache(args[0])
+            queryset = self.set_users_orgs_roles(args[0])
             args = (queryset,)
         return super().get_serializer(*args, **kwargs)
 
@@ -98,6 +99,24 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV
             u.system_roles.cache_set(system_roles)
         return queryset_list
 
+    @staticmethod
+    def set_users_orgs_roles(queryset):
+        user_ids = [u.id for u in queryset]
+        rbs = RoleBinding.objects_raw.filter(
+            user__in=user_ids, scope='org'
+        ).prefetch_related('user', 'role', 'org')
+        user_rbs_mapper = defaultdict(set)
+        for rb in rbs:
+            user_rbs_mapper[rb.user_id].add(rb)
+
+        for u in queryset:
+            user_rbs = user_rbs_mapper[u.id]
+            orgs_roles = defaultdict(set)
+            for rb in user_rbs:
+                orgs_roles[rb.org_name].add(rb.role.display_name)
+            setattr(u, 'orgs_roles', orgs_roles)
+        return queryset
+
     def perform_create(self, serializer):
         users = serializer.save()
         if isinstance(users, User):
diff --git a/apps/users/models/user.py b/apps/users/models/user.py
index ad90da0d1..e01e2b65e 100644
--- a/apps/users/models/user.py
+++ b/apps/users/models/user.py
@@ -435,6 +435,14 @@ class RoleMixin:
         cache.set(key, data, 60 * 60)
         return data
 
+    @lazyproperty
+    def orgs_roles(self):
+        orgs_roles = defaultdict(set)
+        rbs = RoleBinding.objects_raw.filter(user=self, scope='org').prefetch_related('role', 'org')
+        for rb in rbs:
+            orgs_roles[rb.org_name].add(str(rb.role.display_name))
+        return orgs_roles
+
     def expire_rbac_perms_cache(self):
         key = self.PERM_CACHE_KEY.format(self.id, '*')
         cache.delete_pattern(key)
@@ -928,14 +936,6 @@ class User(AuthMixin, TokenMixin, RoleMixin, MFAMixin, LabeledMixin, JSONFilterM
     def is_local(self):
         return self.source == self.Source.local.value
 
-    @property
-    def orgs_roles(self):
-        orgs_roles = defaultdict(set)
-        rbs = RoleBinding.objects_raw.filter(user=self, scope='org').prefetch_related('role', 'org')
-        for rb in rbs:
-            orgs_roles[rb.org_name].add(str(rb.role.display_name))
-        return orgs_roles
-
     def is_password_authenticate(self):
         cas = self.Source.cas
         saml2 = self.Source.saml2
diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py
index 24647483d..bd1dddab2 100644
--- a/apps/users/serializers/user.py
+++ b/apps/users/serializers/user.py
@@ -48,7 +48,7 @@ class RolesSerializerMixin(serializers.Serializer):
         label=_("Org roles"), many=True, required=False,
         default=default_org_roles
     )
-    orgs_roles = serializers.JSONField(read_only=True, label=_("Organization and roles relations"))
+    orgs_roles = serializers.JSONField(read_only=True, label=_("Organizations and roles"))
 
     def pop_roles_if_need(self, fields):
         request = self.context.get("request")
@@ -148,7 +148,7 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, ResourceLa
         # 外键的字段
         fields_fk = []
         # 多对多字段
-        fields_m2m = ["groups", "system_roles", "org_roles", "labels"]
+        fields_m2m = ["groups", "system_roles", "org_roles", "labels", "orgs_roles"]
         # 在serializer 上定义的字段
         fields_custom = ["login_blocked", "password_strategy"]
         fields = fields_verbose + fields_fk + fields_m2m + fields_custom
@@ -288,7 +288,7 @@ class UserRetrieveSerializer(UserSerializer):
     )
 
     class Meta(UserSerializer.Meta):
-        fields = UserSerializer.Meta.fields + ["login_confirm_settings", "orgs_roles"]
+        fields = UserSerializer.Meta.fields + ["login_confirm_settings"]
 
 
 class MiniUserSerializer(serializers.ModelSerializer):