perf: 优化i18n

pull/6571/head
ibuler 2021-07-30 19:13:47 +08:00
parent 66b0173e20
commit b43626b5a2
6 changed files with 258 additions and 197 deletions

View File

@ -45,8 +45,8 @@ class ApplicationSerializerMixin(serializers.Serializer):
class ApplicationSerializer(ApplicationSerializerMixin, BulkOrgResourceModelSerializer): class ApplicationSerializer(ApplicationSerializerMixin, BulkOrgResourceModelSerializer):
category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category(Display)')) category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category display'))
type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type(Dispaly)')) type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display'))
class Meta: class Meta:
model = models.Application model = models.Application
@ -76,9 +76,9 @@ class ApplicationAccountSerializer(serializers.Serializer):
uid = serializers.ReadOnlyField(label=_("Union id")) uid = serializers.ReadOnlyField(label=_("Union id"))
app_name = serializers.ReadOnlyField(label=_("Application name"), read_only=True) app_name = serializers.ReadOnlyField(label=_("Application name"), read_only=True)
app_category = serializers.ChoiceField(label=_('Category'), choices=const.AppCategory.choices, read_only=True) app_category = serializers.ChoiceField(label=_('Category'), choices=const.AppCategory.choices, read_only=True)
app_category_display = serializers.SerializerMethodField(label=_('Category')) app_category_display = serializers.SerializerMethodField(label=_('Category display'))
app_type = serializers.ChoiceField(label=_('Type'), choices=const.AppType.choices, read_only=True) app_type = serializers.ChoiceField(label=_('Type'), choices=const.AppType.choices, read_only=True)
app_type_display = serializers.SerializerMethodField(label=_('Type')) app_type_display = serializers.SerializerMethodField(label=_('Type display'))
category_mapper = dict(const.AppCategory.choices) category_mapper = dict(const.AppCategory.choices)
type_mapper = dict(const.AppType.choices) type_mapper = dict(const.AppType.choices)

View File

@ -9,8 +9,8 @@ from .base import AuthSerializerMixin
class DomainSerializer(BulkOrgResourceModelSerializer): class DomainSerializer(BulkOrgResourceModelSerializer):
asset_count = serializers.SerializerMethodField(label=_('Assets count')) asset_count = serializers.SerializerMethodField(label=_('Assets amount'))
application_count = serializers.SerializerMethodField(label=_('Applications count')) application_count = serializers.SerializerMethodField(label=_('Applications amount'))
gateway_count = serializers.SerializerMethodField(label=_('Gateways count')) gateway_count = serializers.SerializerMethodField(label=_('Gateways count'))
class Meta: class Meta:

Binary file not shown.

View File

@ -7,7 +7,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-07-28 18:36+0800\n" "POT-Creation-Date: 2021-07-30 19:09+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\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"
@ -18,14 +18,14 @@ msgstr ""
"X-Generator: Poedit 2.4.3\n" "X-Generator: Poedit 2.4.3\n"
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47
#: applications/models/application.py:162 assets/models/asset.py:139 #: applications/models/application.py:163 assets/models/asset.py:139
#: assets/models/base.py:175 assets/models/cluster.py:18 #: assets/models/base.py:175 assets/models/cluster.py:18
#: assets/models/cmd_filter.py:21 assets/models/domain.py:21 #: assets/models/cmd_filter.py:21 assets/models/domain.py:21
#: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24
#: orgs/models.py:24 perms/models/base.py:49 settings/models.py:29 #: orgs/models.py:24 perms/models/base.py:49 settings/models.py:29
#: terminal/models/storage.py:23 terminal/models/task.py:16 #: terminal/models/storage.py:23 terminal/models/task.py:16
#: terminal/models/terminal.py:100 users/forms/profile.py:32 #: terminal/models/terminal.py:100 users/forms/profile.py:32
#: users/models/group.py:15 users/models/user.py:555 #: users/models/group.py:15 users/models/user.py:556
#: 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
@ -52,7 +52,7 @@ msgstr "激活中"
# msgid "Date created" # msgid "Date created"
# msgstr "创建日期" # msgstr "创建日期"
#: acls/models/base.py:32 applications/models/application.py:175 #: acls/models/base.py:32 applications/models/application.py:176
#: assets/models/asset.py:144 assets/models/asset.py:220 #: assets/models/asset.py:144 assets/models/asset.py:220
#: assets/models/base.py:180 assets/models/cluster.py:29 #: assets/models/base.py:180 assets/models/cluster.py:29
#: assets/models/cmd_filter.py:23 assets/models/cmd_filter.py:64 #: assets/models/cmd_filter.py:23 assets/models/cmd_filter.py:64
@ -61,7 +61,7 @@ msgstr "激活中"
#: orgs/models.py:27 perms/models/base.py:57 settings/models.py:34 #: orgs/models.py:27 perms/models/base.py:57 settings/models.py:34
#: terminal/models/storage.py:26 terminal/models/terminal.py:114 #: terminal/models/storage.py:26 terminal/models/terminal.py:114
#: tickets/models/ticket.py:73 users/models/group.py:16 #: tickets/models/ticket.py:73 users/models/group.py:16
#: users/models/user.py:588 xpack/plugins/change_auth_plan/models.py:77 #: users/models/user.py:589 xpack/plugins/change_auth_plan/models.py:77
#: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:98 #: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:98
#: xpack/plugins/gathered_user/models.py:26 #: xpack/plugins/gathered_user/models.py:26
msgid "Comment" msgid "Comment"
@ -99,7 +99,7 @@ msgstr "动作"
#: 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:176 #: tickets/models/comment.py:17 users/models/user.py:176
#: users/models/user.py:751 users/models/user.py:777 #: users/models/user.py:752 users/models/user.py:778
#: users/serializers/group.py:19 #: users/serializers/group.py:19
#: 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
@ -179,7 +179,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: applications/serializers/attrs/application_type/vmware_client.py:26 #: applications/serializers/attrs/application_type/vmware_client.py:26
#: assets/models/base.py:176 assets/models/gathered_user.py:15 #: assets/models/base.py:176 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:553 #: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:554
#: 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
@ -229,7 +229,7 @@ msgstr "组织 `{}` 不存在"
msgid "None of the reviewers belong to Organization `{}`" msgid "None of the reviewers belong to Organization `{}`"
msgstr "所有复核人都不属于组织 `{}`" msgstr "所有复核人都不属于组织 `{}`"
#: applications/api/mixin.py:19 templates/_nav_user.html:10 #: applications/api/mixin.py:20 templates/_nav_user.html:10
msgid "My applications" msgid "My applications"
msgstr "我的应用" msgstr "我的应用"
@ -247,25 +247,21 @@ msgstr "远程应用"
msgid "Custom" msgid "Custom"
msgstr "自定义" msgstr "自定义"
#: applications/models/application.py:46 templates/_nav.html:60 #: applications/models/application.py:47 templates/_nav.html:60
msgid "Applications" msgid "Applications"
msgstr "应用管理" msgstr "应用管理"
#: applications/models/application.py:164 #: applications/models/application.py:165
#: applications/serializers/application.py:78 #: applications/serializers/application.py:78 assets/models/label.py:21
#: applications/serializers/application.py:79 assets/models/label.py:21
#: perms/models/application_permission.py:20 #: perms/models/application_permission.py:20
#: perms/serializers/application/permission.py:16
#: perms/serializers/application/user_permission.py:33 #: perms/serializers/application/user_permission.py:33
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:20 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:20
msgid "Category" msgid "Category"
msgstr "类别" msgstr "类别"
#: applications/models/application.py:167 #: applications/models/application.py:168
#: applications/serializers/application.py:80 #: applications/serializers/application.py:80 assets/models/cmd_filter.py:53
#: applications/serializers/application.py:81 assets/models/cmd_filter.py:53
#: assets/models/user.py:202 perms/models/application_permission.py:23 #: assets/models/user.py:202 perms/models/application_permission.py:23
#: perms/serializers/application/permission.py:17
#: perms/serializers/application/user_permission.py:34 #: perms/serializers/application/user_permission.py:34
#: terminal/models/storage.py:55 terminal/models/storage.py:116 #: terminal/models/storage.py:55 terminal/models/storage.py:116
#: tickets/models/ticket.py:38 #: tickets/models/ticket.py:38
@ -273,22 +269,30 @@ msgstr "类别"
msgid "Type" msgid "Type"
msgstr "类型" msgstr "类型"
#: applications/models/application.py:171 assets/models/asset.py:188 #: applications/models/application.py:172 assets/models/asset.py:188
#: assets/models/domain.py:27 assets/models/domain.py:52 #: assets/models/domain.py:27 assets/models/domain.py:52
msgid "Domain" msgid "Domain"
msgstr "网域" msgstr "网域"
#: applications/models/application.py:173 xpack/plugins/cloud/models.py:33 #: applications/models/application.py:174 xpack/plugins/cloud/models.py:33
msgid "Attrs" msgid "Attrs"
msgstr "" msgstr ""
#: applications/serializers/application.py:48 #: applications/serializers/application.py:48
msgid "Category(Display)" #: applications/serializers/application.py:79 assets/serializers/label.py:13
msgstr "类别 (显示名称)" #: perms/serializers/application/permission.py:16
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:24
msgid "Category display"
msgstr "类别名称"
#: applications/serializers/application.py:49 #: applications/serializers/application.py:49
msgid "Type(Dispaly)" #: applications/serializers/application.py:81
msgstr "类型 (显示名称)" #: assets/serializers/system_user.py:26 audits/serializers.py:29
#: perms/serializers/application/permission.py:17
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:31
#: tickets/serializers/ticket/ticket.py:19
msgid "Type display"
msgstr "类型名称"
#: applications/serializers/application.py:72 #: applications/serializers/application.py:72
#: applications/serializers/application.py:100 #: applications/serializers/application.py:100
@ -327,7 +331,7 @@ msgstr "系统用户"
#: applications/serializers/application.py:74 assets/serializers/account.py:31 #: applications/serializers/application.py:74 assets/serializers/account.py:31
msgid "System user display" msgid "System user display"
msgstr "系统用户显示" msgstr "系统用户名称"
#: applications/serializers/application.py:75 #: applications/serializers/application.py:75
msgid "App" msgid "App"
@ -515,7 +519,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:25 #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:25
#: orgs/models.py:437 perms/models/base.py:55 users/models/user.py:596 #: orgs/models.py:437 perms/models/base.py:55 users/models/user.py:597
#: users/serializers/group.py:33 xpack/plugins/change_auth_plan/models.py:81 #: users/serializers/group.py:33 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"
@ -529,7 +533,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:26 #: ops/models/adhoc.py:38 ops/models/command.py:29 orgs/models.py:26
#: orgs/models.py:435 perms/models/base.py:56 users/models/group.py:18 #: orgs/models.py:435 perms/models/base.py:56 users/models/group.py:18
#: users/models/user.py:778 xpack/plugins/cloud/models.py:107 #: users/models/user.py:779 xpack/plugins/cloud/models.py:107
msgid "Date created" msgid "Date created"
msgstr "创建日期" msgstr "创建日期"
@ -587,7 +591,7 @@ msgstr "带宽"
msgid "Contact" msgid "Contact"
msgstr "联系人" msgstr "联系人"
#: assets/models/cluster.py:22 users/models/user.py:574 #: assets/models/cluster.py:22 users/models/user.py:575
msgid "Phone" msgid "Phone"
msgstr "手机" msgstr "手机"
@ -613,7 +617,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:763 #: users/models/user.py:764
msgid "System" msgid "System"
msgstr "系统" msgstr "系统"
@ -753,7 +757,7 @@ msgid "Assets"
msgstr "资产" msgstr "资产"
#: assets/models/user.py:200 templates/_nav.html:17 #: assets/models/user.py:200 templates/_nav.html:17
#: users/views/profile/password.py:43 users/views/profile/pubkey.py:37 #: users/views/profile/pubkey.py:37
msgid "Users" msgid "Users"
msgstr "用户管理" msgstr "用户管理"
@ -810,7 +814,7 @@ msgstr "协议重复: {}"
msgid "Domain name" msgid "Domain name"
msgstr "网域名称" msgstr "网域名称"
#: assets/serializers/asset.py:67 perms/serializers/asset/permission.py:49 #: assets/serializers/asset.py:67
msgid "Nodes name" msgid "Nodes name"
msgstr "节点名称" msgstr "节点名称"
@ -831,28 +835,21 @@ msgstr "特权用户名称"
msgid "private key invalid" msgid "private key invalid"
msgstr "密钥不合法" msgstr "密钥不合法"
#: assets/serializers/domain.py:12 #: assets/serializers/domain.py:12 assets/serializers/label.py:12
msgid "Assets count" #: assets/serializers/system_user.py:52
#: perms/serializers/asset/permission.py:72
msgid "Assets amount"
msgstr "资产数量" msgstr "资产数量"
#: assets/serializers/domain.py:13 #: assets/serializers/domain.py:13
msgid "Applications count" #: perms/serializers/application/permission.py:43
msgid "Applications amount"
msgstr "应用数量" msgstr "应用数量"
#: assets/serializers/domain.py:14 #: assets/serializers/domain.py:14
msgid "Gateways count" msgid "Gateways count"
msgstr "网关数量" msgstr "网关数量"
#: assets/serializers/label.py:12 assets/serializers/system_user.py:52
#: perms/serializers/asset/permission.py:74
msgid "Assets amount"
msgstr "资产数量"
#: assets/serializers/label.py:13
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:24
msgid "Category display"
msgstr "类别名称"
#: assets/serializers/node.py:18 #: assets/serializers/node.py:18
msgid "value" msgid "value"
msgstr "值" msgstr "值"
@ -865,24 +862,18 @@ msgstr "不能包含: /"
msgid "The same level node name cannot be the same" msgid "The same level node name cannot be the same"
msgstr "同级别节点名字不能重复" msgstr "同级别节点名字不能重复"
#: assets/serializers/system_user.py:26 audits/serializers.py:29
#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:31
#: tickets/serializers/ticket/ticket.py:19
msgid "Type display"
msgstr "类型名称"
#: assets/serializers/system_user.py:27 #: assets/serializers/system_user.py:27
msgid "SSH key fingerprint" msgid "SSH key fingerprint"
msgstr "密钥指纹" msgstr "密钥指纹"
#: assets/serializers/system_user.py:51 #: assets/serializers/system_user.py:51
#: perms/serializers/asset/permission.py:75 #: perms/serializers/asset/permission.py:73
msgid "Nodes amount" msgid "Nodes amount"
msgstr "节点数量" msgstr "节点数量"
#: assets/serializers/system_user.py:53 assets/serializers/system_user.py:201 #: assets/serializers/system_user.py:53 assets/serializers/system_user.py:201
msgid "Login mode display" msgid "Login mode display"
msgstr "认证方式(显示名称" msgstr "认证方式名称"
#: assets/serializers/system_user.py:55 #: assets/serializers/system_user.py:55
msgid "Ad domain" msgid "Ad domain"
@ -1151,7 +1142,7 @@ 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:577 #: users/forms/profile.py:64 users/models/user.py:578
#: users/serializers/profile.py:102 #: users/serializers/profile.py:102
msgid "MFA" msgid "MFA"
msgstr "多因子认证" msgstr "多因子认证"
@ -1210,11 +1201,11 @@ msgstr "运行用户"
#: audits/serializers.py:94 #: audits/serializers.py:94
msgid "Run as display" msgid "Run as display"
msgstr "运行用户" msgstr "运行用户名称"
#: audits/serializers.py:95 #: audits/serializers.py:95
msgid "User display" msgid "User display"
msgstr "用户" msgstr "用户名称"
#: audits/signals_handler.py:62 #: audits/signals_handler.py:62
msgid "SSH Key" msgid "SSH Key"
@ -2021,7 +2012,7 @@ msgstr ""
"div>" "div>"
#: notifications/backends/__init__.py:11 users/forms/profile.py:101 #: notifications/backends/__init__.py:11 users/forms/profile.py:101
#: users/models/user.py:557 #: users/models/user.py:558
msgid "Email" msgid "Email"
msgstr "邮件" msgstr "邮件"
@ -2037,7 +2028,7 @@ msgstr "等待任务开始"
msgid "Not has host {} permission" msgid "Not has host {} permission"
msgstr "没有该主机 {} 权限" msgstr "没有该主机 {} 权限"
#: ops/apps.py:9 ops/notifications.py:13 #: ops/apps.py:9 ops/notifications.py:16
msgid "Operations" msgid "Operations"
msgstr "运维" msgstr "运维"
@ -2115,7 +2106,7 @@ msgstr "创建者"
#: ops/models/adhoc.py:240 #: ops/models/adhoc.py:240
msgid "Task display" msgid "Task display"
msgstr "任务展示" msgstr "任务名称"
#: ops/models/adhoc.py:242 #: ops/models/adhoc.py:242
msgid "Host amount" msgid "Host amount"
@ -2164,12 +2155,30 @@ msgstr "命令 `{}` 不允许被执行 ......."
msgid "Task end" msgid "Task end"
msgstr "任务结束" msgstr "任务结束"
#: ops/notifications.py:14 #: ops/notifications.py:17
msgid "Server performance" msgid "Server performance"
msgstr "监控告警" msgstr "监控告警"
#: ops/notifications.py:21 #: ops/notifications.py:86
msgid "Disk used more than 80%: {} => {}" msgid "The terminal is offline: {}"
msgstr ""
#: ops/notifications.py:103
#, fuzzy
#| msgid "Disk used more than 80%: {} => {}"
msgid "Disk used more than {}%: {} => {} ({})"
msgstr "磁盘使用率超过 80%: {} => {}"
#: ops/notifications.py:128
#, fuzzy
#| msgid "Disk used more than 80%: {} => {}"
msgid "CPU load more than {}: => {} ({})"
msgstr "磁盘使用率超过 80%: {} => {}"
#: ops/notifications.py:142
#, fuzzy
#| msgid "Disk used more than 80%: {} => {}"
msgid "Memory used more than {}%: => {} ({})"
msgstr "磁盘使用率超过 80%: {} => {}" msgstr "磁盘使用率超过 80%: {} => {}"
#: ops/tasks.py:71 #: ops/tasks.py:71
@ -2214,7 +2223,7 @@ msgstr "组织审计员"
msgid "GLOBAL" msgid "GLOBAL"
msgstr "全局组织" msgstr "全局组织"
#: orgs/models.py:434 users/models/user.py:565 #: orgs/models.py:434 users/models/user.py:566
#: users/templates/users/_select_user_modal.html:15 #: users/templates/users/_select_user_modal.html:15
msgid "Role" msgid "Role"
msgstr "角色" msgstr "角色"
@ -2264,7 +2273,9 @@ msgid "Clipboard copy paste"
msgstr "剪贴板复制粘贴" msgstr "剪贴板复制粘贴"
#: perms/models/asset_permission.py:102 #: perms/models/asset_permission.py:102
#: perms/serializers/asset/permission.py:71 #: perms/serializers/application/permission.py:39
#: perms/serializers/asset/permission.py:41
#: perms/serializers/asset/permission.py:69
msgid "Actions" msgid "Actions"
msgstr "动作" msgstr "动作"
@ -2277,7 +2288,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:561 users/templates/users/_select_user_modal.html:16 #: users/models/user.py:562 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
@ -2290,54 +2301,66 @@ 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:593 #: users/models/user.py:594
msgid "Date expired" msgid "Date expired"
msgstr "失效日期" msgstr "失效日期"
#: perms/serializers/application/permission.py:53 #: perms/serializers/application/permission.py:18
#: perms/serializers/application/permission.py:38
#: perms/serializers/asset/permission.py:42
#: perms/serializers/asset/permission.py:68 users/serializers/user.py:80
msgid "Is valid"
msgstr "账户是否有效"
#: perms/serializers/application/permission.py:19
#: perms/serializers/application/permission.py:37
#: perms/serializers/asset/permission.py:43
#: perms/serializers/asset/permission.py:67 users/serializers/user.py:33
#: users/serializers/user.py:81
msgid "Is expired"
msgstr "是否过期"
#: perms/serializers/application/permission.py:40
#: perms/serializers/asset/permission.py:70 users/serializers/group.py:34
msgid "Users amount"
msgstr "用户数量"
#: perms/serializers/application/permission.py:41
#: perms/serializers/asset/permission.py:71
msgid "User groups amount"
msgstr "用户组数量"
#: perms/serializers/application/permission.py:42
#: perms/serializers/asset/permission.py:74
msgid "System users amount"
msgstr "系统用户数量"
#: perms/serializers/application/permission.py:66
msgid "" msgid ""
"The application list contains applications that are different from the " "The application list contains applications that are different from the "
"permission type. ({})" "permission type. ({})"
msgstr "应用列表中包含与授权类型不同的应用。({})" msgstr "应用列表中包含与授权类型不同的应用。({})"
#: perms/serializers/asset/permission.py:44
msgid "Users display"
msgstr "用户名称"
#: perms/serializers/asset/permission.py:45 #: perms/serializers/asset/permission.py:45
#: perms/serializers/asset/permission.py:69 users/serializers/user.py:33 msgid "User groups display"
#: users/serializers/user.py:81 msgstr "用户名称"
msgid "Is expired"
msgstr "是否过期"
#: perms/serializers/asset/permission.py:46 #: perms/serializers/asset/permission.py:46
msgid "Users name" msgid "Assets display"
msgstr "用户名"
#: perms/serializers/asset/permission.py:47
msgid "User groups name"
msgstr "用户组名称"
#: perms/serializers/asset/permission.py:48
msgid "Assets name"
msgstr "资产名称" msgstr "资产名称"
#: perms/serializers/asset/permission.py:50 #: perms/serializers/asset/permission.py:47
msgid "System users name" msgid "Nodes display"
msgstr "节点名称"
#: perms/serializers/asset/permission.py:48
msgid "System users display"
msgstr "系统用户名称" msgstr "系统用户名称"
#: perms/serializers/asset/permission.py:70 users/serializers/user.py:80
msgid "Is valid"
msgstr "账户是否有效"
#: perms/serializers/asset/permission.py:72 users/serializers/group.py:34
msgid "Users amount"
msgstr "用户数量"
#: perms/serializers/asset/permission.py:73
msgid "User groups amount"
msgstr "用户组数量"
#: perms/serializers/asset/permission.py:76
msgid "System users amount"
msgstr "系统用户数量"
#: settings/api/common.py:25 #: settings/api/common.py:25
msgid "Test mail sent to {}, please check" msgid "Test mail sent to {}, please check"
msgstr "邮件已经发送{}, 请检查" msgstr "邮件已经发送{}, 请检查"
@ -2599,59 +2622,51 @@ msgid "Global MFA auth"
msgstr "全局启用 MFA 认证" msgstr "全局启用 MFA 认证"
#: settings/serializers/settings.py:155 #: settings/serializers/settings.py:155
msgid "Admin user MFA auth"
msgstr "所有管理员启用 MFA"
#: settings/serializers/settings.py:156
msgid "Admin user enable MFA"
msgstr "强制管理员启用 MFA"
#: settings/serializers/settings.py:159
msgid "Batch command execution" msgid "Batch command execution"
msgstr "批量命令执行" msgstr "批量命令执行"
#: settings/serializers/settings.py:160 #: settings/serializers/settings.py:156
msgid "Allow user run batch command or not using ansible" msgid "Allow user run batch command or not using ansible"
msgstr "是否允许用户使用 ansible 执行批量命令" msgstr "是否允许用户使用 ansible 执行批量命令"
#: settings/serializers/settings.py:163 #: settings/serializers/settings.py:159
msgid "Enable terminal register" msgid "Enable terminal register"
msgstr "终端注册" msgstr "终端注册"
#: settings/serializers/settings.py:164 #: settings/serializers/settings.py:160
msgid "" msgid ""
"Allow terminal register, after all terminal setup, you should disable this " "Allow terminal register, after all terminal setup, you should disable this "
"for security" "for security"
msgstr "是否允许终端注册,当所有终端启动后,为了安全应该关闭" msgstr "是否允许终端注册,当所有终端启动后,为了安全应该关闭"
#: settings/serializers/settings.py:168 #: settings/serializers/settings.py:164
msgid "Limit the number of login failures" msgid "Limit the number of login failures"
msgstr "限制登录失败次数" msgstr "限制登录失败次数"
#: settings/serializers/settings.py:172 #: settings/serializers/settings.py:168
msgid "Block logon interval" msgid "Block logon interval"
msgstr "禁止登录时间间隔" msgstr "禁止登录时间间隔"
#: settings/serializers/settings.py:173 #: settings/serializers/settings.py:169
msgid "" msgid ""
"Tip: (unit/minute) if the user has failed to log in for a limited number of " "Tip: (unit/minute) if the user has failed to log in for a limited number of "
"times, no login is allowed during this time interval." "times, no login is allowed during this time interval."
msgstr "" msgstr ""
"提示:(单位:分)当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录" "提示:(单位:分)当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录"
#: settings/serializers/settings.py:177 #: settings/serializers/settings.py:173
msgid "Connection max idle time" msgid "Connection max idle time"
msgstr "连接最大空闲时间" msgstr "连接最大空闲时间"
#: settings/serializers/settings.py:178 #: settings/serializers/settings.py:174
msgid "If idle time more than it, disconnect connection Unit: minute" msgid "If idle time more than it, disconnect connection Unit: minute"
msgstr "提示:如果超过该配置没有操作,连接会被断开 (单位:分)" msgstr "提示:如果超过该配置没有操作,连接会被断开 (单位:分)"
#: settings/serializers/settings.py:182 #: settings/serializers/settings.py:178
msgid "User password expiration" msgid "User password expiration"
msgstr "用户密码过期时间" msgstr "用户密码过期时间"
#: settings/serializers/settings.py:183 #: settings/serializers/settings.py:179
msgid "" msgid ""
"Tip: (unit: day) If the user does not update the password during the time, " "Tip: (unit: day) If the user does not update the password during the time, "
"the user password will expire failure;The password expiration reminder mail " "the user password will expire failure;The password expiration reminder mail "
@ -2661,57 +2676,57 @@ msgstr ""
"提示:(单位:天)如果用户在此期间没有更新密码,用户密码将过期失效; 密码过期" "提示:(单位:天)如果用户在此期间没有更新密码,用户密码将过期失效; 密码过期"
"提醒邮件将在密码过期前5天内由系统每天自动发送给用户" "提醒邮件将在密码过期前5天内由系统每天自动发送给用户"
#: settings/serializers/settings.py:187 #: settings/serializers/settings.py:183
msgid "Number of repeated historical passwords" msgid "Number of repeated historical passwords"
msgstr "不能设置近几次密码" msgstr "不能设置近几次密码"
#: settings/serializers/settings.py:188 #: settings/serializers/settings.py:184
msgid "" msgid ""
"Tip: When the user resets the password, it cannot be the previous n " "Tip: When the user resets the password, it cannot be the previous n "
"historical passwords of the user" "historical passwords of the user"
msgstr "提示:用户重置密码时,不能为该用户前几次使用过的密码" msgstr "提示:用户重置密码时,不能为该用户前几次使用过的密码"
#: settings/serializers/settings.py:192 #: settings/serializers/settings.py:188
msgid "Password minimum length" msgid "Password minimum length"
msgstr "密码最小长度" msgstr "密码最小长度"
#: settings/serializers/settings.py:196 #: settings/serializers/settings.py:192
msgid "Admin user password minimum length" msgid "Admin user password minimum length"
msgstr "管理员密码最小长度" msgstr "管理员密码最小长度"
#: settings/serializers/settings.py:199 #: settings/serializers/settings.py:195
msgid "Must contain capital" msgid "Must contain capital"
msgstr "必须包含大写字符" msgstr "必须包含大写字符"
#: settings/serializers/settings.py:201 #: settings/serializers/settings.py:197
msgid "Must contain lowercase" msgid "Must contain lowercase"
msgstr "必须包含小写字符" msgstr "必须包含小写字符"
#: settings/serializers/settings.py:202 #: settings/serializers/settings.py:198
msgid "Must contain numeric" msgid "Must contain numeric"
msgstr "必须包含数字" msgstr "必须包含数字"
#: settings/serializers/settings.py:203 #: settings/serializers/settings.py:199
msgid "Must contain special" msgid "Must contain special"
msgstr "必须包含特殊字符" msgstr "必须包含特殊字符"
#: settings/serializers/settings.py:204 #: settings/serializers/settings.py:200
msgid "Insecure command alert" msgid "Insecure command alert"
msgstr "危险命令告警" msgstr "危险命令告警"
#: settings/serializers/settings.py:206 #: settings/serializers/settings.py:202
msgid "Email recipient" msgid "Email recipient"
msgstr "邮件收件人" msgstr "邮件收件人"
#: settings/serializers/settings.py:207 #: settings/serializers/settings.py:203
msgid "Multiple user using , split" msgid "Multiple user using , split"
msgstr "多个用户,使用 , 分割" msgstr "多个用户,使用 , 分割"
#: settings/serializers/settings.py:215 #: settings/serializers/settings.py:211
msgid "Enable WeCom Auth" msgid "Enable WeCom Auth"
msgstr "启用企业微信认证" msgstr "启用企业微信认证"
#: settings/serializers/settings.py:222 #: settings/serializers/settings.py:218
msgid "Enable DingTalk Auth" msgid "Enable DingTalk Auth"
msgstr "启用钉钉认证" msgstr "启用钉钉认证"
@ -3349,7 +3364,7 @@ msgstr "会话ID"
#: terminal/backends/command/serializers.py:19 #: terminal/backends/command/serializers.py:19
msgid "Risk level display" msgid "Risk level display"
msgstr "风险等级(显示名称" msgstr "风险等级名称"
#: terminal/backends/command/serializers.py:21 #: terminal/backends/command/serializers.py:21
msgid "Timestamp" msgid "Timestamp"
@ -3428,6 +3443,10 @@ msgstr "默认存储"
msgid "Args" msgid "Args"
msgstr "参数" msgstr "参数"
#: terminal/models/task.py:18
msgid "Kwargs"
msgstr ""
#: terminal/models/terminal.py:103 #: terminal/models/terminal.py:103
msgid "type" msgid "type"
msgstr "类型" msgstr "类型"
@ -4082,11 +4101,11 @@ msgid "Public key should not be the same as your old one."
msgstr "不能和原来的密钥相同" msgstr "不能和原来的密钥相同"
#: users/forms/profile.py:149 users/serializers/profile.py:74 #: users/forms/profile.py:149 users/serializers/profile.py:74
#: users/serializers/profile.py:148 users/serializers/profile.py:161 #: users/serializers/profile.py:149 users/serializers/profile.py:162
msgid "Not a valid ssh public key" msgid "Not a valid ssh public key"
msgstr "SSH密钥不合法" msgstr "SSH密钥不合法"
#: users/forms/profile.py:160 users/models/user.py:585 #: users/forms/profile.py:160 users/models/user.py:586
#: users/templates/users/user_password_update.html:48 #: users/templates/users/user_password_update.html:48
msgid "Public key" msgid "Public key"
msgstr "SSH公钥" msgstr "SSH公钥"
@ -4103,39 +4122,39 @@ msgstr "系统审计员"
msgid "Force enable" msgid "Force enable"
msgstr "强制启用" msgstr "强制启用"
#: users/models/user.py:534 #: users/models/user.py:535
msgid "Local" msgid "Local"
msgstr "数据库" msgstr "数据库"
#: users/models/user.py:568 #: users/models/user.py:569
msgid "Avatar" msgid "Avatar"
msgstr "头像" msgstr "头像"
#: users/models/user.py:571 #: users/models/user.py:572
msgid "Wechat" msgid "Wechat"
msgstr "微信" msgstr "微信"
#: users/models/user.py:582 #: users/models/user.py:583
msgid "Private key" msgid "Private key"
msgstr "ssh私钥" msgstr "ssh私钥"
#: users/models/user.py:601 #: users/models/user.py:602
msgid "Source" msgid "Source"
msgstr "来源" msgstr "来源"
#: users/models/user.py:605 #: users/models/user.py:606
msgid "Date password last updated" msgid "Date password last updated"
msgstr "最后更新密码日期" msgstr "最后更新密码日期"
#: users/models/user.py:608 #: users/models/user.py:609
msgid "Need update password" msgid "Need update password"
msgstr "需要更新密码" msgstr "需要更新密码"
#: users/models/user.py:759 #: users/models/user.py:760
msgid "Administrator" msgid "Administrator"
msgstr "管理员" msgstr "管理员"
#: users/models/user.py:762 #: users/models/user.py:763
msgid "Administrator is the super user of system" msgid "Administrator is the super user of system"
msgstr "Administrator是初始的超级管理员" msgstr "Administrator是初始的超级管理员"
@ -4155,7 +4174,7 @@ msgstr "新密码不能是最近 {} 次的密码"
msgid "The newly set password is inconsistent" msgid "The newly set password is inconsistent"
msgstr "两次密码不一致" msgstr "两次密码不一致"
#: users/serializers/profile.py:119 users/serializers/user.py:79 #: users/serializers/profile.py:120 users/serializers/user.py:79
msgid "Is first login" msgid "Is first login"
msgstr "首次登录" msgstr "首次登录"
@ -4522,7 +4541,7 @@ msgstr ""
" <br>\n" " <br>\n"
" " " "
#: users/utils.py:116 users/views/profile/reset.py:124 #: users/utils.py:116 users/views/profile/reset.py:125
msgid "Reset password success" msgid "Reset password success"
msgstr "重置密码成功" msgstr "重置密码成功"
@ -4726,36 +4745,28 @@ msgstr ""
" <br>\n" " <br>\n"
" " " "
#: users/views/profile/otp.py:107 users/views/profile/otp.py:147 #: users/views/profile/otp.py:122 users/views/profile/otp.py:161
#: users/views/profile/otp.py:167 #: users/views/profile/otp.py:181
msgid "MFA code invalid, or ntp sync server time" msgid "MFA code invalid, or ntp sync server time"
msgstr "MFA验证码不正确或者服务器端时间不对" msgstr "MFA验证码不正确或者服务器端时间不对"
#: users/views/profile/otp.py:191 #: users/views/profile/otp.py:205
msgid "MFA enable success" msgid "MFA enable success"
msgstr "多因子认证启用成功" msgstr "多因子认证启用成功"
#: users/views/profile/otp.py:192 #: users/views/profile/otp.py:206
msgid "MFA enable success, return login page" msgid "MFA enable success, return login page"
msgstr "多因子认证启用成功,返回到登录页面" msgstr "多因子认证启用成功,返回到登录页面"
#: users/views/profile/otp.py:194 #: users/views/profile/otp.py:208
msgid "MFA disable success" msgid "MFA disable success"
msgstr "多因子认证禁用成功" msgstr "多因子认证禁用成功"
#: users/views/profile/otp.py:195 #: users/views/profile/otp.py:209
msgid "MFA disable success, return login page" msgid "MFA disable success, return login page"
msgstr "多因子认证禁用成功,返回登录页面" msgstr "多因子认证禁用成功,返回登录页面"
#: users/views/profile/password.py:44 #: users/views/profile/password.py:30
msgid "Password update"
msgstr "密码更新"
#: users/views/profile/password.py:60 users/views/profile/reset.py:105
msgid "* Your password does not meet the requirements"
msgstr "* 您的密码不符合要求"
#: users/views/profile/password.py:75
msgid "Password invalid" msgid "Password invalid"
msgstr "用户名或密码无效" msgstr "用户名或密码无效"
@ -4782,19 +4793,23 @@ msgid ""
"password" "password"
msgstr "用户来自 {} 请去相应系统修改密码" msgstr "用户来自 {} 请去相应系统修改密码"
#: users/views/profile/reset.py:83 users/views/profile/reset.py:93 #: users/views/profile/reset.py:83 users/views/profile/reset.py:94
msgid "Token invalid or expired" msgid "Token invalid or expired"
msgstr "Token错误或失效" msgstr "Token错误或失效"
#: users/views/profile/reset.py:98 #: users/views/profile/reset.py:99
msgid "User auth from {}, go there change password" msgid "User auth from {}, go there change password"
msgstr "用户认证源来自 {}, 请去相应系统修改密码" msgstr "用户认证源来自 {}, 请去相应系统修改密码"
#: users/views/profile/reset.py:111 #: users/views/profile/reset.py:106
msgid "* Your password does not meet the requirements"
msgstr "* 您的密码不符合要求"
#: users/views/profile/reset.py:112
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:125 #: users/views/profile/reset.py:126
msgid "Reset password success, return to login page" msgid "Reset password success, return to login page"
msgstr "重置密码成功,返回到登录页面" msgstr "重置密码成功,返回到登录页面"
@ -5294,6 +5309,33 @@ msgstr "旗舰版"
msgid "Community edition" msgid "Community edition"
msgstr "社区版" msgstr "社区版"
#~ msgid "Category(Display)"
#~ msgstr "类别 (显示名称)"
#~ msgid "Type(Dispaly)"
#~ msgstr "类型 (显示名称)"
#~ msgid "Users name"
#~ msgstr "用户名"
#~ msgid "User groups name"
#~ msgstr "用户组名称"
#~ msgid "Assets name"
#~ msgstr "资产名称"
#~ msgid "System users name"
#~ msgstr "系统用户名称"
#~ msgid "Admin user MFA auth"
#~ msgstr "所有管理员启用 MFA"
#~ msgid "Admin user enable MFA"
#~ msgstr "强制管理员启用 MFA"
#~ msgid "Password update"
#~ msgstr "密码更新"
#~ msgid "All user enable MFA" #~ msgid "All user enable MFA"
#~ msgstr "强制所有用户启用 MFA" #~ msgstr "强制所有用户启用 MFA"

View File

@ -13,29 +13,42 @@ __all__ = [
class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer): class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer):
category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category')) category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category display'))
type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type')) type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display'))
is_valid = serializers.BooleanField(read_only=True) is_valid = serializers.BooleanField(read_only=True, label=_('Is valid'))
is_expired = serializers.BooleanField(read_only=True) is_expired = serializers.BooleanField(read_only=True, label=_("Is expired"))
class Meta: class Meta:
model = ApplicationPermission model = ApplicationPermission
fields_mini = ['id', 'name'] fields_mini = ['id', 'name']
fields_small = fields_mini + [ fields_small = fields_mini + [
'category', 'category_display', 'type', 'type_display', 'is_active', 'is_expired', 'category', 'category_display', 'type', 'type_display',
'is_valid', 'created_by', 'date_created', 'date_expired', 'date_start', 'comment' 'is_active', 'is_expired', 'is_valid',
'created_by', 'date_created', 'date_expired', 'date_start', 'comment'
] ]
fields_m2m = [ fields_m2m = [
'users', 'user_groups', 'applications', 'system_users', 'users', 'user_groups', 'applications', 'system_users',
'users_amount', 'user_groups_amount', 'applications_amount', 'system_users_amount', 'users_amount', 'user_groups_amount', 'applications_amount',
'system_users_amount',
] ]
fields = fields_small + fields_m2m fields = fields_small + fields_m2m
read_only_fields = ['created_by', 'date_created'] read_only_fields = ['created_by', 'date_created']
extra_kwargs = {
'is_expired': {'label': _('Is expired')},
'is_valid': {'label': _('Is valid')},
'actions': {'label': _('Actions')},
'users_amount': {'label': _('Users amount')},
'user_groups_amount': {'label': _('User groups amount')},
'system_users_amount': {'label': _('System users amount')},
'applications_amount': {'label': _('Applications amount')},
}
@classmethod @classmethod
def setup_eager_loading(cls, queryset): def setup_eager_loading(cls, queryset):
""" Perform necessary eager loading of data. """ """ Perform necessary eager loading of data. """
queryset = queryset.prefetch_related('users', 'user_groups', 'applications', 'system_users') queryset = queryset.prefetch_related(
'users', 'user_groups', 'applications', 'system_users'
)
return queryset return queryset
def validate_applications(self, applications): def validate_applications(self, applications):

View File

@ -3,9 +3,7 @@
from rest_framework import serializers from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.db.models import Q
from django.db.models import Prefetch, Q
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from perms.models import AssetPermission, Action from perms.models import AssetPermission, Action
@ -40,14 +38,14 @@ class ActionsDisplayField(ActionsField):
class AssetPermissionSerializer(BulkOrgResourceModelSerializer): class AssetPermissionSerializer(BulkOrgResourceModelSerializer):
actions = ActionsField(required=False, allow_null=True) actions = ActionsField(required=False, allow_null=True, label=_("Actions"))
is_valid = serializers.BooleanField(read_only=True) is_valid = serializers.BooleanField(read_only=True, label=_("Is valid"))
is_expired = serializers.BooleanField(read_only=True, label=_('Is expired')) is_expired = serializers.BooleanField(read_only=True, label=_('Is expired'))
users_display = serializers.ListField(child=serializers.CharField(), label=_('Users name'), required=False) users_display = serializers.ListField(child=serializers.CharField(), label=_('Users display'), required=False)
user_groups_display = serializers.ListField(child=serializers.CharField(), label=_('User groups name'), required=False) user_groups_display = serializers.ListField(child=serializers.CharField(), label=_('User groups display'), required=False)
assets_display = serializers.ListField(child=serializers.CharField(), label=_('Assets name'), required=False) assets_display = serializers.ListField(child=serializers.CharField(), label=_('Assets display'), required=False)
nodes_display = serializers.ListField(child=serializers.CharField(), label=_('Nodes name'), required=False) nodes_display = serializers.ListField(child=serializers.CharField(), label=_('Nodes display'), required=False)
system_users_display = serializers.ListField(child=serializers.CharField(), label=_('System users name'), required=False) system_users_display = serializers.ListField(child=serializers.CharField(), label=_('System users display'), required=False)
class Meta: class Meta:
model = AssetPermission model = AssetPermission
@ -58,8 +56,8 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer):
'date_start', 'comment' 'date_start', 'comment'
] ]
fields_m2m = [ fields_m2m = [
'users', 'users_display', 'user_groups', 'user_groups_display', 'assets', 'assets_display', 'users', 'users_display', 'user_groups', 'user_groups_display', 'assets',
'nodes', 'nodes_display', 'system_users', 'system_users_display', 'assets_display', 'nodes', 'nodes_display', 'system_users', 'system_users_display',
'users_amount', 'user_groups_amount', 'assets_amount', 'users_amount', 'user_groups_amount', 'assets_amount',
'nodes_amount', 'system_users_amount', 'nodes_amount', 'system_users_amount',
] ]
@ -79,7 +77,9 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer):
@classmethod @classmethod
def setup_eager_loading(cls, queryset): def setup_eager_loading(cls, queryset):
""" Perform necessary eager loading of data. """ """ Perform necessary eager loading of data. """
queryset = queryset.prefetch_related('users', 'user_groups', 'assets', 'nodes', 'system_users') queryset = queryset.prefetch_related(
'users', 'user_groups', 'assets', 'nodes', 'system_users'
)
return queryset return queryset
def to_internal_value(self, data): def to_internal_value(self, data):
@ -93,33 +93,39 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer):
if system_user and system_user.id not in system_users: if system_user and system_user.id not in system_users:
system_users.append(system_user.id) system_users.append(system_user.id)
data['system_users'] = system_users data['system_users'] = system_users
return super().to_internal_value(data) return super().to_internal_value(data)
def perform_display_create(self, instance, **kwargs): @staticmethod
def perform_display_create(instance, **kwargs):
# 用户 # 用户
users_to_set = User.objects.filter( users_to_set = User.objects.filter(
Q(name__in=kwargs.get('users_display')) | Q(username__in=kwargs.get('users_display')) Q(name__in=kwargs.get('users_display')) |
Q(username__in=kwargs.get('users_display'))
).distinct() ).distinct()
instance.users.add(*users_to_set) instance.users.add(*users_to_set)
# 用户组 # 用户组
user_groups_to_set = UserGroup.objects.filter(name__in=kwargs.get('user_groups_display')).distinct() user_groups_to_set = UserGroup.objects.filter(
name__in=kwargs.get('user_groups_display')
).distinct()
instance.user_groups.add(*user_groups_to_set) instance.user_groups.add(*user_groups_to_set)
# 资产 # 资产
assets_to_set = Asset.objects.filter( assets_to_set = Asset.objects.filter(
Q(ip__in=kwargs.get('assets_display')) | Q(hostname__in=kwargs.get('assets_display')) Q(ip__in=kwargs.get('assets_display')) |
Q(hostname__in=kwargs.get('assets_display'))
).distinct() ).distinct()
instance.assets.add(*assets_to_set) instance.assets.add(*assets_to_set)
# 节点 # 节点
nodes_to_set = Node.objects.filter(full_value__in=kwargs.get('nodes_display')).distinct() nodes_to_set = Node.objects.filter(
full_value__in=kwargs.get('nodes_display')
).distinct()
instance.nodes.add(*nodes_to_set) instance.nodes.add(*nodes_to_set)
def create(self, validated_data): def create(self, validated_data):
display = { display = {
'users_display' : validated_data.pop('users_display', ''), 'users_display': validated_data.pop('users_display', ''),
'user_groups_display' : validated_data.pop('user_groups_display', ''), 'user_groups_display': validated_data.pop('user_groups_display', ''),
'assets_display' : validated_data.pop('assets_display', ''), 'assets_display': validated_data.pop('assets_display', ''),
'nodes_display' : validated_data.pop('nodes_display', '') 'nodes_display': validated_data.pop('nodes_display', '')
} }
instance = super().create(validated_data) instance = super().create(validated_data)
self.perform_display_create(instance, **display) self.perform_display_create(instance, **display)