fix: 有在线会话的终端不能删除

pull/6142/head
xinwen 2021-05-19 14:51:24 +08:00 committed by Jiangjie.Bai
parent f9ca46dd67
commit 77b4847bd9
3 changed files with 103 additions and 71 deletions

Binary file not shown.

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-05-17 18:56+0800\n" "POT-Creation-Date: 2021-05-19 14:48+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@ -25,7 +25,7 @@ msgstr ""
#: orgs/models.py:23 perms/models/base.py:49 settings/models.py:29 #: orgs/models.py:23 perms/models/base.py:49 settings/models.py:29
#: terminal/models/storage.py:23 terminal/models/storage.py:90 #: terminal/models/storage.py:23 terminal/models/storage.py:90
#: terminal/models/task.py:16 terminal/models/terminal.py:100 #: terminal/models/task.py:16 terminal/models/terminal.py:100
#: users/forms/profile.py:32 users/models/group.py:15 users/models/user.py:558 #: users/forms/profile.py:32 users/models/group.py:15 users/models/user.py:550
#: users/templates/users/_select_user_modal.html:13 #: users/templates/users/_select_user_modal.html:13
#: users/templates/users/user_asset_permission.html:37 #: users/templates/users/user_asset_permission.html:37
#: users/templates/users/user_asset_permission.html:154 #: users/templates/users/user_asset_permission.html:154
@ -61,7 +61,7 @@ msgstr "激活中"
#: orgs/models.py:26 perms/models/base.py:57 settings/models.py:34 #: orgs/models.py:26 perms/models/base.py:57 settings/models.py:34
#: terminal/models/storage.py:29 terminal/models/storage.py:96 #: terminal/models/storage.py:29 terminal/models/storage.py:96
#: terminal/models/terminal.py:114 tickets/models/ticket.py:73 #: terminal/models/terminal.py:114 tickets/models/ticket.py:73
#: users/models/group.py:16 users/models/user.py:591 #: users/models/group.py:16 users/models/user.py:583
#: xpack/plugins/change_auth_plan/models.py:77 xpack/plugins/cloud/models.py:35 #: xpack/plugins/change_auth_plan/models.py:77 xpack/plugins/cloud/models.py:35
#: xpack/plugins/cloud/models.py:98 xpack/plugins/gathered_user/models.py:26 #: xpack/plugins/cloud/models.py:98 xpack/plugins/gathered_user/models.py:26
msgid "Comment" msgid "Comment"
@ -98,8 +98,8 @@ msgstr "动作"
#: perms/models/base.py:50 templates/index.html:78 #: perms/models/base.py:50 templates/index.html:78
#: terminal/backends/command/models.py:18 #: terminal/backends/command/models.py:18
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:38 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:38
#: tickets/models/comment.py:17 users/models/user.py:184 #: tickets/models/comment.py:17 users/models/user.py:176
#: users/models/user.py:746 users/models/user.py:772 #: users/models/user.py:738 users/models/user.py:764
#: users/serializers/group.py:20 #: users/serializers/group.py:20
#: users/templates/users/user_asset_permission.html:38 #: users/templates/users/user_asset_permission.html:38
#: users/templates/users/user_asset_permission.html:64 #: users/templates/users/user_asset_permission.html:64
@ -180,7 +180,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: applications/serializers/attrs/application_type/vmware_client.py:26 #: applications/serializers/attrs/application_type/vmware_client.py:26
#: assets/models/base.py:251 assets/models/gathered_user.py:15 #: assets/models/base.py:251 assets/models/gathered_user.py:15
#: audits/models.py:100 authentication/forms.py:15 authentication/forms.py:17 #: audits/models.py:100 authentication/forms.py:15 authentication/forms.py:17
#: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:556 #: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:548
#: users/templates/users/_select_user_modal.html:14 #: users/templates/users/_select_user_modal.html:14
#: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:47
#: xpack/plugins/change_auth_plan/models.py:278 #: xpack/plugins/change_auth_plan/models.py:278
@ -483,7 +483,7 @@ msgstr "标签管理"
#: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 #: assets/models/cluster.py:28 assets/models/cmd_filter.py:26
#: assets/models/cmd_filter.py:67 assets/models/group.py:21 #: assets/models/cmd_filter.py:67 assets/models/group.py:21
#: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24 #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24
#: orgs/models.py:422 perms/models/base.py:55 users/models/user.py:599 #: orgs/models.py:422 perms/models/base.py:55 users/models/user.py:591
#: users/serializers/group.py:35 xpack/plugins/change_auth_plan/models.py:81 #: users/serializers/group.py:35 xpack/plugins/change_auth_plan/models.py:81
#: xpack/plugins/cloud/models.py:104 xpack/plugins/gathered_user/models.py:30 #: xpack/plugins/cloud/models.py:104 xpack/plugins/gathered_user/models.py:30
msgid "Created by" msgid "Created by"
@ -497,7 +497,7 @@ msgstr "创建者"
#: assets/models/label.py:25 common/db/models.py:72 common/mixins/models.py:50 #: assets/models/label.py:25 common/db/models.py:72 common/mixins/models.py:50
#: ops/models/adhoc.py:38 ops/models/command.py:29 orgs/models.py:25 #: ops/models/adhoc.py:38 ops/models/command.py:29 orgs/models.py:25
#: orgs/models.py:420 perms/models/base.py:56 users/models/group.py:18 #: orgs/models.py:420 perms/models/base.py:56 users/models/group.py:18
#: users/models/user.py:773 xpack/plugins/cloud/models.py:107 #: users/models/user.py:765 xpack/plugins/cloud/models.py:107
msgid "Date created" msgid "Date created"
msgstr "创建日期" msgstr "创建日期"
@ -543,7 +543,7 @@ msgstr "带宽"
msgid "Contact" msgid "Contact"
msgstr "联系人" msgstr "联系人"
#: assets/models/cluster.py:22 users/models/user.py:577 #: assets/models/cluster.py:22 users/models/user.py:569
msgid "Phone" msgid "Phone"
msgstr "手机" msgstr "手机"
@ -569,7 +569,7 @@ msgid "Default"
msgstr "默认" msgstr "默认"
#: assets/models/cluster.py:36 assets/models/label.py:14 #: assets/models/cluster.py:36 assets/models/label.py:14
#: users/models/user.py:758 #: users/models/user.py:750
msgid "System" msgid "System"
msgstr "系统" msgstr "系统"
@ -814,11 +814,11 @@ msgid "Backend"
msgstr "后端" msgstr "后端"
#: assets/serializers/asset_user.py:80 users/forms/profile.py:160 #: assets/serializers/asset_user.py:80 users/forms/profile.py:160
#: users/models/user.py:588 users/templates/users/user_password_update.html:48 #: users/models/user.py:580 users/templates/users/user_password_update.html:48
msgid "Public key" msgid "Public key"
msgstr "SSH公钥" msgstr "SSH公钥"
#: assets/serializers/asset_user.py:84 users/models/user.py:585 #: assets/serializers/asset_user.py:84 users/models/user.py:577
msgid "Private key" msgid "Private key"
msgstr "ssh私钥" msgstr "ssh私钥"
@ -1127,8 +1127,8 @@ msgstr "用户代理"
#: audits/models.py:105 #: audits/models.py:105
#: authentication/templates/authentication/_mfa_confirm_modal.html:14 #: authentication/templates/authentication/_mfa_confirm_modal.html:14
#: authentication/templates/authentication/login_otp.html:6 #: authentication/templates/authentication/login_otp.html:6
#: users/forms/profile.py:64 users/models/user.py:580 #: users/forms/profile.py:64 users/models/user.py:572
#: users/serializers/profile.py:104 #: users/serializers/profile.py:102
msgid "MFA" msgid "MFA"
msgstr "多因子认证" msgstr "多因子认证"
@ -1218,54 +1218,54 @@ msgstr "钉钉"
msgid "Code is invalid" msgid "Code is invalid"
msgstr "Code无效" msgstr "Code无效"
#: authentication/backends/api.py:52 #: authentication/backends/api.py:57
msgid "Invalid signature header. No credentials provided." msgid "Invalid signature header. No credentials provided."
msgstr "" msgstr ""
#: authentication/backends/api.py:55 #: authentication/backends/api.py:60
msgid "Invalid signature header. Signature string should not contain spaces." msgid "Invalid signature header. Signature string should not contain spaces."
msgstr "" msgstr ""
#: authentication/backends/api.py:62 #: authentication/backends/api.py:67
msgid "Invalid signature header. Format like AccessKeyId:Signature" msgid "Invalid signature header. Format like AccessKeyId:Signature"
msgstr "" msgstr ""
#: authentication/backends/api.py:66 #: authentication/backends/api.py:71
msgid "" msgid ""
"Invalid signature header. Signature string should not contain invalid " "Invalid signature header. Signature string should not contain invalid "
"characters." "characters."
msgstr "" msgstr ""
#: authentication/backends/api.py:86 authentication/backends/api.py:102 #: authentication/backends/api.py:91 authentication/backends/api.py:107
msgid "Invalid signature." msgid "Invalid signature."
msgstr "" msgstr ""
#: authentication/backends/api.py:93 #: authentication/backends/api.py:98
msgid "HTTP header: Date not provide or not %a, %d %b %Y %H:%M:%S GMT" msgid "HTTP header: Date not provide or not %a, %d %b %Y %H:%M:%S GMT"
msgstr "" msgstr ""
#: authentication/backends/api.py:98 #: authentication/backends/api.py:103
msgid "Expired, more than 15 minutes" msgid "Expired, more than 15 minutes"
msgstr "" msgstr ""
#: authentication/backends/api.py:105 #: authentication/backends/api.py:110
msgid "User disabled." msgid "User disabled."
msgstr "用户已禁用" msgstr "用户已禁用"
#: authentication/backends/api.py:123 #: authentication/backends/api.py:128
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication/backends/api.py:126 #: authentication/backends/api.py:131
msgid "Invalid token header. Sign string should not contain spaces." msgid "Invalid token header. Sign string should not contain spaces."
msgstr "" msgstr ""
#: authentication/backends/api.py:133 #: authentication/backends/api.py:138
msgid "" msgid ""
"Invalid token header. Sign string should not contain invalid characters." "Invalid token header. Sign string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication/backends/api.py:144 #: authentication/backends/api.py:149
msgid "Invalid token or cache refreshed." msgid "Invalid token or cache refreshed."
msgstr "" msgstr ""
@ -1437,13 +1437,13 @@ msgid "Show"
msgstr "显示" msgstr "显示"
#: authentication/templates/authentication/_access_key_modal.html:66 #: authentication/templates/authentication/_access_key_modal.html:66
#: users/models/user.py:470 users/serializers/profile.py:101 #: users/models/user.py:462 users/serializers/profile.py:99
#: users/templates/users/user_verify_mfa.html:32 #: users/templates/users/user_verify_mfa.html:32
msgid "Disable" msgid "Disable"
msgstr "禁用" msgstr "禁用"
#: authentication/templates/authentication/_access_key_modal.html:67 #: authentication/templates/authentication/_access_key_modal.html:67
#: users/models/user.py:471 users/serializers/profile.py:102 #: users/models/user.py:463 users/serializers/profile.py:100
msgid "Enable" msgid "Enable"
msgstr "启用" msgstr "启用"
@ -1547,48 +1547,56 @@ msgstr "返回"
msgid "Copy success" msgid "Copy success"
msgstr "复制成功" msgstr "复制成功"
#: authentication/views/dingtalk.py:41 authentication/views/wecom.py:41 #: authentication/views/dingtalk.py:41
msgid "DingTalk Error, Please contact your system administrator"
msgstr "钉钉错误,请联系系统管理员"
#: authentication/views/dingtalk.py:44
msgid "DingTalk Error"
msgstr "钉钉错误"
#: authentication/views/dingtalk.py:56 authentication/views/wecom.py:56
msgid "You've been hacked" msgid "You've been hacked"
msgstr "你被攻击了" msgstr "你被攻击了"
#: authentication/views/dingtalk.py:77 #: authentication/views/dingtalk.py:92
msgid "DingTalk is already bound" msgid "DingTalk is already bound"
msgstr "钉钉已经绑定" msgstr "钉钉已经绑定"
#: authentication/views/dingtalk.py:90 authentication/views/wecom.py:89 #: authentication/views/dingtalk.py:105 authentication/views/wecom.py:104
msgid "Please verify your password first" msgid "Please verify your password first"
msgstr "请检查密码" msgstr "请检查密码"
#: authentication/views/dingtalk.py:114 authentication/views/wecom.py:113 #: authentication/views/dingtalk.py:129 authentication/views/wecom.py:128
msgid "Invalid user_id" msgid "Invalid user_id"
msgstr "无效的 user_id" msgstr "无效的 user_id"
#: authentication/views/dingtalk.py:130 #: authentication/views/dingtalk.py:145
msgid "DingTalk query user failed" msgid "DingTalk query user failed"
msgstr "钉钉查询用户失败" msgstr "钉钉查询用户失败"
#: authentication/views/dingtalk.py:139 #: authentication/views/dingtalk.py:154
msgid "The DingTalk is already bound to another user" msgid "The DingTalk is already bound to another user"
msgstr "该钉钉已经绑定其他用户" msgstr "该钉钉已经绑定其他用户"
#: authentication/views/dingtalk.py:144 authentication/views/dingtalk.py:227 #: authentication/views/dingtalk.py:159 authentication/views/dingtalk.py:242
#: authentication/views/dingtalk.py:228 #: authentication/views/dingtalk.py:243
msgid "Binding DingTalk successfully" msgid "Binding DingTalk successfully"
msgstr "绑定 钉钉 成功" msgstr "绑定 钉钉 成功"
#: authentication/views/dingtalk.py:196 #: authentication/views/dingtalk.py:211
msgid "Failed to get user from DingTalk" msgid "Failed to get user from DingTalk"
msgstr "从钉钉获取用户失败" msgstr "从钉钉获取用户失败"
#: authentication/views/dingtalk.py:202 #: authentication/views/dingtalk.py:217
msgid "DingTalk is not bound" msgid "DingTalk is not bound"
msgstr "钉钉没有绑定" msgstr "钉钉没有绑定"
#: authentication/views/dingtalk.py:203 authentication/views/wecom.py:201 #: authentication/views/dingtalk.py:218 authentication/views/wecom.py:216
msgid "Please login with a password and then bind the WeCom" msgid "Please login with a password and then bind the WeCom"
msgstr "请使用密码登录,然后绑定企业微信" msgstr "请使用密码登录,然后绑定企业微信"
#: authentication/views/dingtalk.py:245 authentication/views/dingtalk.py:246 #: authentication/views/dingtalk.py:260 authentication/views/dingtalk.py:261
msgid "Binding DingTalk failed" msgid "Binding DingTalk failed"
msgstr "绑定钉钉失败" msgstr "绑定钉钉失败"
@ -1624,32 +1632,40 @@ msgstr "退出登录成功"
msgid "Logout success, return login page" msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面" msgstr "退出登录成功,返回到登录页面"
#: authentication/views/wecom.py:76 #: authentication/views/wecom.py:41
msgid "WeCom Error, Please contact your system administrator"
msgstr "企业微信错误,请联系系统管理员"
#: authentication/views/wecom.py:44
msgid "WeCom Error"
msgstr "企业微信错误"
#: authentication/views/wecom.py:91
msgid "WeCom is already bound" msgid "WeCom is already bound"
msgstr "企业微信已经绑定" msgstr "企业微信已经绑定"
#: authentication/views/wecom.py:128 #: authentication/views/wecom.py:143
msgid "WeCom query user failed" msgid "WeCom query user failed"
msgstr "企业微信查询用户失败" msgstr "企业微信查询用户失败"
#: authentication/views/wecom.py:137 #: authentication/views/wecom.py:152
msgid "The WeCom is already bound to another user" msgid "The WeCom is already bound to another user"
msgstr "该企业微信已经绑定其他用户" msgstr "该企业微信已经绑定其他用户"
#: authentication/views/wecom.py:142 authentication/views/wecom.py:225 #: authentication/views/wecom.py:157 authentication/views/wecom.py:240
#: authentication/views/wecom.py:226 #: authentication/views/wecom.py:241
msgid "Binding WeCom successfully" msgid "Binding WeCom successfully"
msgstr "绑定 企业微信 成功" msgstr "绑定 企业微信 成功"
#: authentication/views/wecom.py:194 #: authentication/views/wecom.py:209
msgid "Failed to get user from WeCom" msgid "Failed to get user from WeCom"
msgstr "从企业微信获取用户失败" msgstr "从企业微信获取用户失败"
#: authentication/views/wecom.py:200 #: authentication/views/wecom.py:215
msgid "WeCom is not bound" msgid "WeCom is not bound"
msgstr "没有绑定企业微信" msgstr "没有绑定企业微信"
#: authentication/views/wecom.py:243 authentication/views/wecom.py:244 #: authentication/views/wecom.py:258 authentication/views/wecom.py:259
msgid "Binding WeCom failed" msgid "Binding WeCom failed"
msgstr "绑定企业微信失败" msgstr "绑定企业微信失败"
@ -1675,7 +1691,7 @@ msgstr "对象"
msgid "The file content overflowed (The maximum length `{}` bytes)" msgid "The file content overflowed (The maximum length `{}` bytes)"
msgstr "文件内容太大 (最大长度 `{}` 字节)" msgstr "文件内容太大 (最大长度 `{}` 字节)"
#: common/drf/parsers/base.py:146 #: common/drf/parsers/base.py:148
msgid "Parse file error: {}" msgid "Parse file error: {}"
msgstr "解析文件错误: {}" msgstr "解析文件错误: {}"
@ -1988,7 +2004,7 @@ msgstr "组织审计员"
msgid "GLOBAL" msgid "GLOBAL"
msgstr "全局组织" msgstr "全局组织"
#: orgs/models.py:419 users/models/user.py:568 #: orgs/models.py:419 users/models/user.py:560
#: users/templates/users/_select_user_modal.html:15 #: users/templates/users/_select_user_modal.html:15
msgid "Role" msgid "Role"
msgstr "角色" msgstr "角色"
@ -2001,7 +2017,7 @@ msgstr "管理员正在修改授权,请稍等"
msgid "The authorization cannot be revoked for the time being" msgid "The authorization cannot be revoked for the time being"
msgstr "该授权暂时不能撤销" msgstr "该授权暂时不能撤销"
#: perms/models/application_permission.py:27 users/models/user.py:185 #: perms/models/application_permission.py:27 users/models/user.py:177
msgid "Application" msgid "Application"
msgstr "应用程序" msgstr "应用程序"
@ -2060,7 +2076,7 @@ msgid "Favorite"
msgstr "收藏夹" msgstr "收藏夹"
#: perms/models/base.py:51 templates/_nav.html:21 users/models/group.py:31 #: perms/models/base.py:51 templates/_nav.html:21 users/models/group.py:31
#: users/models/user.py:564 users/templates/users/_select_user_modal.html:16 #: users/models/user.py:556 users/templates/users/_select_user_modal.html:16
#: users/templates/users/user_asset_permission.html:39 #: users/templates/users/user_asset_permission.html:39
#: users/templates/users/user_asset_permission.html:67 #: users/templates/users/user_asset_permission.html:67
#: users/templates/users/user_database_app_permission.html:38 #: users/templates/users/user_database_app_permission.html:38
@ -2073,7 +2089,7 @@ msgstr "用户组"
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:77 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:77
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:43 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:43
#: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:81 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:81
#: users/models/user.py:596 #: users/models/user.py:588
msgid "Date expired" msgid "Date expired"
msgstr "失效日期" msgstr "失效日期"
@ -3080,6 +3096,10 @@ msgstr "测试成功"
msgid "Test failure: Account invalid" msgid "Test failure: Account invalid"
msgstr "测试失败: 账户无效" msgstr "测试失败: 账户无效"
#: terminal/api/terminal.py:38 terminal/api/terminal.py:43
msgid "Have online sessions"
msgstr "有在线会话"
#: terminal/backends/command/es.py:27 #: terminal/backends/command/es.py:27
msgid "Invalid elasticsearch config" msgid "Invalid elasticsearch config"
msgstr "无效的 Elasticsearch 配置" msgstr "无效的 Elasticsearch 配置"
@ -3816,7 +3836,7 @@ msgstr "确认密码"
msgid "Password does not match" msgid "Password does not match"
msgstr "密码不一致" msgstr "密码不一致"
#: users/forms/profile.py:101 users/models/user.py:560 #: users/forms/profile.py:101 users/models/user.py:552
msgid "Email" msgid "Email"
msgstr "邮件" msgstr "邮件"
@ -3848,48 +3868,48 @@ msgstr "复制你的公钥到这里"
msgid "Public key should not be the same as your old one." msgid "Public key should not be the same as your old one."
msgstr "不能和原来的密钥相同" msgstr "不能和原来的密钥相同"
#: users/forms/profile.py:149 users/serializers/profile.py:76 #: users/forms/profile.py:149 users/serializers/profile.py:74
#: users/serializers/profile.py:150 users/serializers/profile.py:163 #: users/serializers/profile.py:148 users/serializers/profile.py:161
msgid "Not a valid ssh public key" msgid "Not a valid ssh public key"
msgstr "SSH密钥不合法" msgstr "SSH密钥不合法"
#: users/models/user.py:182 #: users/models/user.py:174
msgid "System administrator" msgid "System administrator"
msgstr "系统管理员" msgstr "系统管理员"
#: users/models/user.py:183 #: users/models/user.py:175
msgid "System auditor" msgid "System auditor"
msgstr "系统审计员" msgstr "系统审计员"
#: users/models/user.py:472 #: users/models/user.py:464
msgid "Force enable" msgid "Force enable"
msgstr "强制启用" msgstr "强制启用"
#: users/models/user.py:537 #: users/models/user.py:529
msgid "Local" msgid "Local"
msgstr "数据库" msgstr "数据库"
#: users/models/user.py:571 #: users/models/user.py:563
msgid "Avatar" msgid "Avatar"
msgstr "头像" msgstr "头像"
#: users/models/user.py:574 #: users/models/user.py:566
msgid "Wechat" msgid "Wechat"
msgstr "微信" msgstr "微信"
#: users/models/user.py:604 #: users/models/user.py:596
msgid "Source" msgid "Source"
msgstr "用户来源" msgstr "用户来源"
#: users/models/user.py:608 #: users/models/user.py:600
msgid "Date password last updated" msgid "Date password last updated"
msgstr "最后更新密码日期" msgstr "最后更新密码日期"
#: users/models/user.py:754 #: users/models/user.py:746
msgid "Administrator" msgid "Administrator"
msgstr "管理员" msgstr "管理员"
#: users/models/user.py:757 #: users/models/user.py:749
msgid "Administrator is the super user of system" msgid "Administrator is the super user of system"
msgstr "Administrator是初始的超级管理员" msgstr "Administrator是初始的超级管理员"
@ -3905,11 +3925,11 @@ msgstr "密码不满足安全规则"
msgid "The new password cannot be the last {} passwords" msgid "The new password cannot be the last {} passwords"
msgstr "新密码不能是最近 {} 次的密码" msgstr "新密码不能是最近 {} 次的密码"
#: users/serializers/profile.py:48 #: users/serializers/profile.py:46
msgid "The newly set password is inconsistent" msgid "The newly set password is inconsistent"
msgstr "两次密码不一致" msgstr "两次密码不一致"
#: users/serializers/profile.py:121 users/serializers/user.py:80 #: users/serializers/profile.py:119 users/serializers/user.py:80
msgid "Is first login" msgid "Is first login"
msgstr "首次登录" msgstr "首次登录"
@ -4277,7 +4297,7 @@ msgstr ""
" <br>\n" " <br>\n"
" " " "
#: users/utils.py:116 users/views/profile/reset.py:126 #: users/utils.py:116 users/views/profile/reset.py:124
msgid "Reset password success" msgid "Reset password success"
msgstr "重置密码成功" msgstr "重置密码成功"
@ -4549,7 +4569,7 @@ msgstr "用户认证源来自 {}, 请去相应系统修改密码"
msgid "* The new password cannot be the last {} passwords" msgid "* The new password cannot be the last {} passwords"
msgstr "* 新密码不能是最近 {} 次的密码" msgstr "* 新密码不能是最近 {} 次的密码"
#: users/views/profile/reset.py:127 #: users/views/profile/reset.py:125
msgid "Reset password success, return to login page" msgid "Reset password success, return to login page"
msgstr "重置密码成功,返回到登录页面" msgstr "重置密码成功,返回到登录页面"

View File

@ -8,8 +8,9 @@ from rest_framework import generics
from rest_framework.views import APIView, Response from rest_framework.views import APIView, Response
from rest_framework import status from rest_framework import status
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext_lazy as _
from common.exceptions import JMSException
from common.drf.api import JMSBulkModelViewSet from common.drf.api import JMSBulkModelViewSet
from common.utils import get_object_or_none from common.utils import get_object_or_none
from common.permissions import IsAppUser, IsSuperUser, WithBootstrapToken from common.permissions import IsAppUser, IsSuperUser, WithBootstrapToken
@ -30,6 +31,17 @@ class TerminalViewSet(JMSBulkModelViewSet):
permission_classes = (IsSuperUser,) permission_classes = (IsSuperUser,)
filterset_fields = ['name', 'remote_addr', 'type'] filterset_fields = ['name', 'remote_addr', 'type']
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
if instance.get_online_session_count() > 0:
raise JMSException(
code='have_online_session',
detail=_('Have online sessions')
)
self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT)
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
if isinstance(request.data, list): if isinstance(request.data, list):
raise exceptions.BulkCreateNotSupport() raise exceptions.BulkCreateNotSupport()