From ebecd005819aeb0b6ba4bb6deb9fefbdd2200ed7 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 16 Oct 2018 16:47:47 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E4=BC=98=E5=85=88?= =?UTF-8?q?=E7=BA=A7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/cmd_filter.py | 4 +- apps/assets/forms/user.py | 2 +- apps/assets/models/cmd_filter.py | 4 +- apps/assets/models/user.py | 6 +- .../assets/templates/assets/asset_detail.html | 4 + .../templates/assets/cmd_filter_list.html | 2 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 55049 -> 55096 bytes apps/locale/zh/LC_MESSAGES/django.po | 318 +++++++++--------- apps/perms/api.py | 2 +- 9 files changed, 173 insertions(+), 169 deletions(-) diff --git a/apps/assets/api/cmd_filter.py b/apps/assets/api/cmd_filter.py index f4537cf17..14afc0ae3 100644 --- a/apps/assets/api/cmd_filter.py +++ b/apps/assets/api/cmd_filter.py @@ -26,7 +26,7 @@ class CommandFilterRuleViewSet(BulkModelViewSet): fpk = self.kwargs.get('filter_pk') if not fpk: return CommandFilterRule.objects.none() - group = get_object_or_404(CommandFilter, pk=fpk) - return group.rules.all().order_by('priority') + cmd_filter = get_object_or_404(CommandFilter, pk=fpk) + return cmd_filter.rules.all() diff --git a/apps/assets/forms/user.py b/apps/assets/forms/user.py index 740576067..f5c62a4ff 100644 --- a/apps/assets/forms/user.py +++ b/apps/assets/forms/user.py @@ -150,7 +150,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm): 'name': '* required', 'username': '* required', 'auto_push': _('Auto push system user to asset'), - 'priority': _('High level will be using login asset as default, ' + 'priority': _('1-100, High level will be using login asset as default, ' 'if user was granted more than 2 system user'), 'login_mode': _('If you choose manual login mode, you do not ' 'need to fill in the username and password.') diff --git a/apps/assets/models/cmd_filter.py b/apps/assets/models/cmd_filter.py index bd37db36e..170921318 100644 --- a/apps/assets/models/cmd_filter.py +++ b/apps/assets/models/cmd_filter.py @@ -44,7 +44,7 @@ class CommandFilterRule(OrgModelMixin): id = models.UUIDField(default=uuid.uuid4, primary_key=True) filter = models.ForeignKey('CommandFilter', on_delete=models.CASCADE, verbose_name=_("Filter"), related_name='rules') type = models.CharField(max_length=16, default=TYPE_COMMAND, choices=TYPE_CHOICES, verbose_name=_("Type")) - priority = models.IntegerField(default=50, verbose_name=_("Priority"), help_text=_("1-100, the lower will be match first"), + priority = models.IntegerField(default=50, verbose_name=_("Priority"), help_text=_("1-100, the higher will be match first"), validators=[MinValueValidator(1), MaxValueValidator(100)]) content = models.TextField(max_length=1024, verbose_name=_("Content"), help_text=_("One line one command")) action = models.IntegerField(default=ACTION_DENY, choices=ACTION_CHOICES, verbose_name=_("Action")) @@ -54,7 +54,7 @@ class CommandFilterRule(OrgModelMixin): created_by = models.CharField(max_length=128, blank=True, default='', verbose_name=_('Created by')) class Meta: - ordering = ('priority', 'action') + ordering = ('-priority', 'action') def __str__(self): return '{} % {}'.format(self.type, self.content) diff --git a/apps/assets/models/user.py b/apps/assets/models/user.py index cd90d4207..918440081 100644 --- a/apps/assets/models/user.py +++ b/apps/assets/models/user.py @@ -7,6 +7,7 @@ import logging from django.core.cache import cache from django.db import models from django.utils.translation import ugettext_lazy as _ +from django.core.validators import MinValueValidator, MaxValueValidator from common.utils import get_signer from ..const import SYSTEM_USER_CONN_CACHE_KEY @@ -111,7 +112,8 @@ class SystemUser(AssetUser): nodes = models.ManyToManyField('assets.Node', blank=True, verbose_name=_("Nodes")) assets = models.ManyToManyField('assets.Asset', blank=True, verbose_name=_("Assets")) - priority = models.IntegerField(default=10, verbose_name=_("Priority")) + priority = models.IntegerField(default=20, verbose_name=_("Priority"), + validators=[MinValueValidator(1), MaxValueValidator(100)]) protocol = models.CharField(max_length=16, choices=PROTOCOL_CHOICES, default='ssh', verbose_name=_('Protocol')) auto_push = models.BooleanField(default=True, verbose_name=_('Auto push')) sudo = models.TextField(default='/bin/whoami', verbose_name=_('Sudo')) @@ -168,7 +170,7 @@ class SystemUser(AssetUser): from .cmd_filter import CommandFilterRule rules = CommandFilterRule.objects.filter( filter__in=self.cmd_filters.all() - ).order_by('priority').distinct() + ).distinct() return rules @classmethod diff --git a/apps/assets/templates/assets/asset_detail.html b/apps/assets/templates/assets/asset_detail.html index 2f36688be..378de8b98 100644 --- a/apps/assets/templates/assets/asset_detail.html +++ b/apps/assets/templates/assets/asset_detail.html @@ -69,6 +69,10 @@ {% trans 'Port' %}: {{ asset.port }} + + {% trans 'Protocol' %}: + {{ asset.protocol }} + {% trans 'Admin user' %}: {{ asset.admin_user }} diff --git a/apps/assets/templates/assets/cmd_filter_list.html b/apps/assets/templates/assets/cmd_filter_list.html index 1586af8f9..78060177b 100644 --- a/apps/assets/templates/assets/cmd_filter_list.html +++ b/apps/assets/templates/assets/cmd_filter_list.html @@ -5,7 +5,7 @@
{% trans 'System user bound some command filter, each command filter has some rules,'%} {% trans 'When user login asset with this system user, then run a command,' %} - {% trans 'The command will be filter by rules, higher priority(lower number) rule run first,' %} + {% trans 'The command will be filter by rules, higher priority rule run first,' %} {% trans 'When a rule matched, if rule action is allow, then allow command execute,' %} {% trans 'else if action is deny, then command with be deny,' %} {% trans 'else match next rule, if none matched, allowed' %} diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 13c0cabd8e151c336202c8bb019ca51fb503d8d3..d88a5bfaef399ce91967de0660f258bf9005b329 100644 GIT binary patch delta 15180 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 S)3lsPtMA9;Ox-^^?Ee7tQnV!i delta 15134 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 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 2324f0c0d..4c0305a50 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-15 15:30+0800\n" +"POT-Creation-Date: 2018-10-16 16:03+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -33,7 +33,7 @@ msgstr "更新节点资产硬件信息: {}" msgid "Test if the assets under the node are connectable: {}" msgstr "测试节点下资产是否可连接: {}" -#: assets/forms/asset.py:27 assets/models/asset.py:82 assets/models/user.py:112 +#: assets/forms/asset.py:27 assets/models/asset.py:83 assets/models/user.py:113 #: assets/templates/assets/asset_detail.html:183 #: assets/templates/assets/asset_detail.html:191 #: assets/templates/assets/system_user_asset.html:95 perms/models.py:32 @@ -41,10 +41,10 @@ msgid "Nodes" msgstr "节点管理" #: assets/forms/asset.py:30 assets/forms/asset.py:69 assets/forms/asset.py:112 -#: assets/forms/asset.py:116 assets/models/asset.py:87 -#: assets/models/cluster.py:19 assets/models/user.py:72 +#: assets/forms/asset.py:116 assets/models/asset.py:88 +#: assets/models/cluster.py:19 assets/models/user.py:73 #: assets/templates/assets/asset_detail.html:73 templates/_nav.html:24 -#: xpack/plugins/cloud/models.py:133 +#: xpack/plugins/cloud/models.py:137 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:67 #: xpack/plugins/orgs/templates/orgs/org_list.html:18 msgid "Admin user" @@ -61,7 +61,7 @@ msgstr "管理用户" msgid "Label" msgstr "标签" -#: assets/forms/asset.py:37 assets/forms/asset.py:76 assets/models/asset.py:78 +#: assets/forms/asset.py:37 assets/forms/asset.py:76 assets/models/asset.py:79 #: assets/models/domain.py:24 assets/models/domain.py:50 #: assets/templates/assets/user_asset_list.html:168 #: xpack/plugins/orgs/templates/orgs/org_list.html:17 @@ -75,7 +75,7 @@ msgstr "网域" #: perms/forms.py:44 perms/models.py:79 #: perms/templates/perms/asset_permission_list.html:57 #: perms/templates/perms/asset_permission_list.html:151 -#: xpack/plugins/cloud/models.py:132 +#: xpack/plugins/cloud/models.py:136 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:63 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:66 msgid "Node" @@ -104,7 +104,7 @@ msgstr "如果有多个的互相隔离的网络,设置资产属于的网域, msgid "Select assets" msgstr "选择资产" -#: assets/forms/asset.py:108 assets/models/asset.py:75 +#: assets/forms/asset.py:108 assets/models/asset.py:76 #: assets/models/domain.py:48 assets/templates/assets/admin_user_assets.html:53 #: assets/templates/assets/asset_detail.html:69 #: assets/templates/assets/domain_gateway_list.html:58 @@ -114,7 +114,7 @@ msgid "Port" msgstr "端口" #: assets/forms/domain.py:15 assets/forms/label.py:13 -#: assets/models/asset.py:242 assets/templates/assets/admin_user_list.html:28 +#: assets/models/asset.py:243 assets/templates/assets/admin_user_list.html:28 #: assets/templates/assets/domain_detail.html:60 #: assets/templates/assets/domain_list.html:26 #: assets/templates/assets/label_list.html:16 @@ -130,7 +130,7 @@ msgstr "端口" #: terminal/templates/terminal/command_list.html:73 #: terminal/templates/terminal/session_list.html:41 #: terminal/templates/terminal/session_list.html:72 -#: xpack/plugins/cloud/models.py:199 +#: xpack/plugins/cloud/models.py:207 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:65 #: xpack/plugins/orgs/templates/orgs/org_list.html:16 msgid "Asset" @@ -170,7 +170,7 @@ msgstr "不能包含特殊字符" #: users/templates/users/user_list.html:23 #: users/templates/users/user_profile.html:51 #: users/templates/users/user_pubkey_update.html:53 -#: xpack/plugins/cloud/models.py:40 xpack/plugins/cloud/models.py:128 +#: xpack/plugins/cloud/models.py:40 xpack/plugins/cloud/models.py:132 #: xpack/plugins/cloud/templates/cloud/account_detail.html:52 #: xpack/plugins/cloud/templates/cloud/account_list.html:12 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:55 @@ -201,7 +201,7 @@ msgstr "用户名" msgid "Password or private key passphrase" msgstr "密码或密钥密码" -#: assets/forms/user.py:26 assets/models/base.py:24 common/forms.py:104 +#: assets/forms/user.py:26 assets/models/base.py:24 common/forms.py:107 #: users/forms.py:17 users/forms.py:35 users/forms.py:47 #: users/templates/users/login.html:65 #: users/templates/users/reset_password.html:53 @@ -229,7 +229,7 @@ msgstr "密码和私钥, 必须输入一个" msgid "* Automatic login mode, must fill in the username." msgstr "自动登录模式,必须填写用户名" -#: assets/forms/user.py:146 assets/models/user.py:120 +#: assets/forms/user.py:146 assets/models/user.py:122 #: assets/templates/assets/_system_user.html:66 #: assets/templates/assets/system_user_detail.html:165 msgid "Command filter" @@ -241,17 +241,17 @@ msgstr "自动推送系统用户到资产" #: assets/forms/user.py:153 msgid "" -"High level will be using login asset as default, if user was granted more " -"than 2 system user" -msgstr "高优先级的系统用户将会作为默认登录用户" +"1-100, High level will be using login asset as default, if user was granted " +"more than 2 system user" +msgstr "1-100, 1最低优先级,100最高优先级。授权多个用户时,高优先级的系统用户将会作为默认登录用户" #: assets/forms/user.py:155 msgid "" "If you choose manual login mode, you do not need to fill in the username and " "password." -msgstr "如果选择手动登录模式,用户名和密码则不需要填写" +msgstr "如果选择手动登录模式,用户名和密码可以不填写" -#: assets/models/asset.py:72 assets/models/domain.py:47 +#: assets/models/asset.py:73 assets/models/domain.py:47 #: assets/templates/assets/_asset_list_modal.html:46 #: assets/templates/assets/admin_user_assets.html:52 #: assets/templates/assets/asset_detail.html:61 @@ -260,28 +260,28 @@ msgstr "如果选择手动登录模式,用户名和密码则不需要填写" #: assets/templates/assets/system_user_asset.html:51 #: assets/templates/assets/user_asset_list.html:46 #: assets/templates/assets/user_asset_list.html:162 -#: audits/templates/audits/login_log_list.html:52 common/forms.py:133 +#: audits/templates/audits/login_log_list.html:52 common/forms.py:136 #: perms/templates/perms/asset_permission_asset.html:55 #: users/templates/users/user_granted_asset.html:45 #: users/templates/users/user_group_granted_asset.html:45 msgid "IP" msgstr "IP" -#: assets/models/asset.py:73 assets/templates/assets/_asset_list_modal.html:45 +#: assets/models/asset.py:74 assets/templates/assets/_asset_list_modal.html:45 #: assets/templates/assets/admin_user_assets.html:51 #: assets/templates/assets/asset_detail.html:57 #: assets/templates/assets/asset_list.html:92 #: assets/templates/assets/system_user_asset.html:50 #: assets/templates/assets/user_asset_list.html:45 -#: assets/templates/assets/user_asset_list.html:161 common/forms.py:132 +#: assets/templates/assets/user_asset_list.html:161 common/forms.py:135 #: perms/templates/perms/asset_permission_asset.html:54 #: users/templates/users/user_granted_asset.html:44 #: users/templates/users/user_group_granted_asset.html:44 msgid "Hostname" msgstr "主机名" -#: assets/models/asset.py:74 assets/models/domain.py:49 -#: assets/models/user.py:115 +#: assets/models/asset.py:75 assets/models/domain.py:49 +#: assets/models/user.py:117 #: assets/templates/assets/domain_gateway_list.html:59 #: assets/templates/assets/system_user_detail.html:70 #: assets/templates/assets/system_user_list.html:31 @@ -290,90 +290,90 @@ msgstr "主机名" msgid "Protocol" msgstr "协议" -#: assets/models/asset.py:76 assets/templates/assets/asset_detail.html:97 +#: assets/models/asset.py:77 assets/templates/assets/asset_detail.html:97 #: assets/templates/assets/user_asset_list.html:165 msgid "Platform" msgstr "系统平台" -#: assets/models/asset.py:83 assets/models/cmd_filter.py:20 +#: assets/models/asset.py:84 assets/models/cmd_filter.py:20 #: assets/models/domain.py:52 assets/models/label.py:21 #: assets/templates/assets/asset_detail.html:105 #: assets/templates/assets/user_asset_list.html:169 msgid "Is active" msgstr "激活" -#: assets/models/asset.py:90 assets/templates/assets/asset_detail.html:65 +#: assets/models/asset.py:91 assets/templates/assets/asset_detail.html:65 msgid "Public IP" msgstr "公网IP" -#: assets/models/asset.py:91 assets/templates/assets/asset_detail.html:113 +#: assets/models/asset.py:92 assets/templates/assets/asset_detail.html:113 msgid "Asset number" msgstr "资产编号" -#: assets/models/asset.py:95 assets/templates/assets/asset_detail.html:77 +#: assets/models/asset.py:96 assets/templates/assets/asset_detail.html:77 msgid "Vendor" msgstr "制造商" -#: assets/models/asset.py:97 assets/templates/assets/asset_detail.html:81 +#: assets/models/asset.py:98 assets/templates/assets/asset_detail.html:81 msgid "Model" msgstr "型号" -#: assets/models/asset.py:99 assets/templates/assets/asset_detail.html:109 +#: assets/models/asset.py:100 assets/templates/assets/asset_detail.html:109 msgid "Serial number" msgstr "序列号" -#: assets/models/asset.py:102 +#: assets/models/asset.py:103 msgid "CPU model" msgstr "CPU型号" -#: assets/models/asset.py:103 +#: assets/models/asset.py:104 msgid "CPU count" msgstr "CPU数量" -#: assets/models/asset.py:104 +#: assets/models/asset.py:105 msgid "CPU cores" msgstr "CPU核数" -#: assets/models/asset.py:105 +#: assets/models/asset.py:106 msgid "CPU vcpus" msgstr "CPU总数" -#: assets/models/asset.py:107 assets/templates/assets/asset_detail.html:89 +#: assets/models/asset.py:108 assets/templates/assets/asset_detail.html:89 msgid "Memory" msgstr "内存" -#: assets/models/asset.py:109 +#: assets/models/asset.py:110 msgid "Disk total" msgstr "硬盘大小" -#: assets/models/asset.py:111 +#: assets/models/asset.py:112 msgid "Disk info" msgstr "硬盘信息" -#: assets/models/asset.py:114 assets/templates/assets/asset_detail.html:101 +#: assets/models/asset.py:115 assets/templates/assets/asset_detail.html:101 #: assets/templates/assets/user_asset_list.html:166 msgid "OS" msgstr "操作系统" -#: assets/models/asset.py:116 +#: assets/models/asset.py:117 msgid "OS version" msgstr "系统版本" -#: assets/models/asset.py:118 +#: assets/models/asset.py:119 msgid "OS arch" msgstr "系统架构" -#: assets/models/asset.py:120 +#: assets/models/asset.py:121 msgid "Hostname raw" msgstr "主机名原始" -#: assets/models/asset.py:124 assets/templates/assets/asset_create.html:34 +#: assets/models/asset.py:125 assets/templates/assets/asset_create.html:34 #: assets/templates/assets/asset_detail.html:220 #: assets/templates/assets/asset_update.html:39 templates/_nav.html:26 msgid "Labels" msgstr "标签管理" -#: assets/models/asset.py:126 assets/models/base.py:30 +#: assets/models/asset.py:127 assets/models/base.py:30 #: assets/models/cluster.py:28 assets/models/cmd_filter.py:24 #: assets/models/cmd_filter.py:54 assets/models/group.py:21 #: assets/templates/assets/admin_user_detail.html:68 @@ -384,11 +384,11 @@ msgstr "标签管理" #: ops/templates/ops/adhoc_detail.html:86 orgs/models.py:15 perms/models.py:37 #: perms/models.py:84 perms/templates/perms/asset_permission_detail.html:98 #: users/models/user.py:92 users/templates/users/user_detail.html:111 -#: xpack/plugins/cloud/models.py:46 xpack/plugins/cloud/models.py:136 +#: xpack/plugins/cloud/models.py:46 xpack/plugins/cloud/models.py:140 msgid "Created by" msgstr "创建者" -#: assets/models/asset.py:129 assets/models/cluster.py:26 +#: assets/models/asset.py:130 assets/models/cluster.py:26 #: assets/models/domain.py:21 assets/models/group.py:22 #: assets/models/label.py:24 assets/templates/assets/admin_user_detail.html:64 #: assets/templates/assets/cmd_filter_detail.html:69 @@ -399,14 +399,14 @@ msgstr "创建者" #: perms/templates/perms/asset_permission_detail.html:94 #: terminal/templates/terminal/terminal_detail.html:59 users/models/group.py:17 #: users/templates/users/user_group_detail.html:63 -#: xpack/plugins/cloud/models.py:47 xpack/plugins/cloud/models.py:137 +#: xpack/plugins/cloud/models.py:47 xpack/plugins/cloud/models.py:141 #: xpack/plugins/cloud/templates/cloud/account_detail.html:68 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:79 #: xpack/plugins/orgs/templates/orgs/org_detail.html:60 msgid "Date created" msgstr "创建日期" -#: assets/models/asset.py:131 assets/models/base.py:27 +#: assets/models/asset.py:132 assets/models/base.py:27 #: assets/models/cluster.py:29 assets/models/cmd_filter.py:21 #: assets/models/cmd_filter.py:51 assets/models/domain.py:19 #: assets/models/domain.py:51 assets/models/group.py:23 @@ -430,7 +430,7 @@ msgstr "创建日期" #: users/templates/users/user_group_detail.html:67 #: users/templates/users/user_group_list.html:14 #: users/templates/users/user_profile.html:130 xpack/plugins/cloud/models.py:45 -#: xpack/plugins/cloud/models.py:134 +#: xpack/plugins/cloud/models.py:138 #: xpack/plugins/cloud/templates/cloud/account_detail.html:72 #: xpack/plugins/cloud/templates/cloud/account_list.html:15 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:71 @@ -538,14 +538,14 @@ msgstr "过滤器" msgid "Type" msgstr "类型" -#: assets/models/cmd_filter.py:47 assets/models/user.py:114 +#: assets/models/cmd_filter.py:47 assets/models/user.py:115 #: assets/templates/assets/cmd_filter_rule_list.html:60 msgid "Priority" msgstr "优先级" #: assets/models/cmd_filter.py:47 -msgid "1-100, the lower will be match first" -msgstr "优先级可选范围为1-100,1最高优先级 100最低优先级" +msgid "1-100, the higher will be match first" +msgstr "优先级可选范围为1-100,1最低优先级,100最高优先级" #: assets/models/cmd_filter.py:49 #: assets/templates/assets/cmd_filter_rule_list.html:59 @@ -634,23 +634,23 @@ msgstr "分类" msgid "Key" msgstr "" -#: assets/models/user.py:108 +#: assets/models/user.py:109 msgid "Automatic login" msgstr "自动登录" -#: assets/models/user.py:109 +#: assets/models/user.py:110 msgid "Manually login" msgstr "手动登录" -#: assets/models/user.py:113 +#: assets/models/user.py:114 #: assets/templates/assets/_asset_group_bulk_update_modal.html:11 #: assets/templates/assets/system_user_asset.html:22 #: assets/templates/assets/system_user_detail.html:22 #: assets/views/admin_user.py:29 assets/views/admin_user.py:47 #: assets/views/admin_user.py:63 assets/views/admin_user.py:78 -#: assets/views/admin_user.py:102 assets/views/asset.py:53 -#: assets/views/asset.py:92 assets/views/asset.py:136 assets/views/asset.py:153 -#: assets/views/asset.py:177 assets/views/cmd_filter.py:30 +#: assets/views/admin_user.py:102 assets/views/asset.py:50 +#: assets/views/asset.py:89 assets/views/asset.py:133 assets/views/asset.py:150 +#: assets/views/asset.py:174 assets/views/cmd_filter.py:30 #: assets/views/cmd_filter.py:46 assets/views/cmd_filter.py:62 #: assets/views/cmd_filter.py:78 assets/views/cmd_filter.py:97 #: assets/views/cmd_filter.py:130 assets/views/cmd_filter.py:163 @@ -664,26 +664,26 @@ msgstr "手动登录" msgid "Assets" msgstr "资产管理" -#: assets/models/user.py:116 assets/templates/assets/_system_user.html:59 +#: assets/models/user.py:118 assets/templates/assets/_system_user.html:59 #: assets/templates/assets/system_user_detail.html:122 #: assets/templates/assets/system_user_update.html:10 msgid "Auto push" msgstr "自动推送" -#: assets/models/user.py:117 assets/templates/assets/system_user_detail.html:74 +#: assets/models/user.py:119 assets/templates/assets/system_user_detail.html:74 msgid "Sudo" msgstr "Sudo" -#: assets/models/user.py:118 assets/templates/assets/system_user_detail.html:79 +#: assets/models/user.py:120 assets/templates/assets/system_user_detail.html:79 msgid "Shell" msgstr "Shell" -#: assets/models/user.py:119 assets/templates/assets/system_user_detail.html:66 +#: assets/models/user.py:121 assets/templates/assets/system_user_detail.html:66 #: assets/templates/assets/system_user_list.html:32 msgid "Login mode" msgstr "登录模式" -#: assets/models/user.py:189 assets/templates/assets/user_asset_list.html:167 +#: assets/models/user.py:191 assets/templates/assets/user_asset_list.html:167 #: audits/models.py:19 audits/templates/audits/ftp_log_list.html:49 #: audits/templates/audits/ftp_log_list.html:72 perms/forms.py:40 #: perms/models.py:33 perms/models.py:81 @@ -798,7 +798,7 @@ msgstr "资产csv文件" msgid "If set id, will use this id update asset existed" msgstr "如果设置了id,则会使用该行信息更新该id的资产" -#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:54 +#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:51 #: templates/_nav.html:22 msgid "Asset list" msgstr "资产列表" @@ -893,7 +893,7 @@ msgid "Submit" msgstr "提交" #: assets/templates/assets/_user_asset_detail_modal.html:11 -#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:178 +#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:175 msgid "Asset detail" msgstr "资产详情" @@ -1157,7 +1157,7 @@ msgstr "" "左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的," "右侧是属于该节点下的资产" -#: assets/templates/assets/asset_list.html:69 assets/views/asset.py:93 +#: assets/templates/assets/asset_list.html:69 assets/views/asset.py:90 msgid "Create asset" msgstr "创建资产" @@ -1322,10 +1322,8 @@ msgid "When user login asset with this system user, then run a command," msgstr "当用户使用这个系统用户登录资产,然后执行一个命令" #: assets/templates/assets/cmd_filter_list.html:8 -msgid "" -"The command will be filter by rules, higher priority(lower number) rule run " -"first," -msgstr "这个命令需要被绑定过滤器的所有规则匹配,高优先级(数字越低)先被匹配," +msgid "The command will be filter by rules, higher priority rule run first," +msgstr "这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配," #: assets/templates/assets/cmd_filter_list.html:9 msgid "" @@ -1513,23 +1511,23 @@ msgstr "更新管理用户" msgid "Admin user detail" msgstr "管理用户详情" -#: assets/views/asset.py:67 templates/_nav_user.html:4 +#: assets/views/asset.py:64 templates/_nav_user.html:4 msgid "My assets" msgstr "我的资产" -#: assets/views/asset.py:107 +#: assets/views/asset.py:104 msgid "Bulk update asset success" msgstr "批量更新资产成功" -#: assets/views/asset.py:137 +#: assets/views/asset.py:134 msgid "Bulk update asset" msgstr "批量更新资产" -#: assets/views/asset.py:154 +#: assets/views/asset.py:151 msgid "Update asset" msgstr "更新资产" -#: assets/views/asset.py:294 +#: assets/views/asset.py:291 msgid "already exists" msgstr "已经存在" @@ -1664,7 +1662,7 @@ msgstr "选择用户" #: templates/_base_list.html:43 templates/_header_bar.html:8 #: terminal/templates/terminal/command_list.html:60 #: terminal/templates/terminal/session_list.html:61 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:50 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:52 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:50 msgid "Search" msgstr "搜索" @@ -1674,7 +1672,7 @@ msgstr "搜索" #: ops/templates/ops/adhoc_history_detail.html:49 #: ops/templates/ops/task_detail.html:55 #: terminal/templates/terminal/session_list.html:70 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:62 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:64 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:62 msgid "ID" msgstr "ID" @@ -1694,15 +1692,15 @@ msgid "MFA" msgstr "MFA" #: audits/templates/audits/login_log_list.html:55 -#: users/models/authentication.py:76 xpack/plugins/cloud/models.py:184 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:67 +#: users/models/authentication.py:76 xpack/plugins/cloud/models.py:192 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:69 msgid "Reason" msgstr "原因" #: audits/templates/audits/login_log_list.html:56 -#: users/models/authentication.py:77 xpack/plugins/cloud/models.py:183 -#: xpack/plugins/cloud/models.py:200 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:68 +#: users/models/authentication.py:77 xpack/plugins/cloud/models.py:191 +#: xpack/plugins/cloud/models.py:208 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:70 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:67 msgid "Status" msgstr "状态" @@ -1787,88 +1785,88 @@ msgstr "不是字符类型" msgid "Encrypt field using Secret Key" msgstr "" -#: common/forms.py:61 +#: common/forms.py:64 msgid "Current SITE URL" msgstr "当前站点URL" -#: common/forms.py:65 +#: common/forms.py:68 msgid "User Guide URL" msgstr "用户向导URL" -#: common/forms.py:66 +#: common/forms.py:69 msgid "User first login update profile done redirect to it" msgstr "用户第一次登录,修改profile后重定向到地址" -#: common/forms.py:69 +#: common/forms.py:72 msgid "Email Subject Prefix" msgstr "Email主题前缀" -#: common/forms.py:76 +#: common/forms.py:79 msgid "SMTP host" msgstr "SMTP主机" -#: common/forms.py:78 +#: common/forms.py:81 msgid "SMTP port" msgstr "SMTP端口" -#: common/forms.py:80 +#: common/forms.py:83 msgid "SMTP user" msgstr "SMTP账号" -#: common/forms.py:83 +#: common/forms.py:86 msgid "SMTP password" msgstr "SMTP密码" -#: common/forms.py:84 +#: common/forms.py:87 msgid "Some provider use token except password" msgstr "一些邮件提供商需要输入的是Token" -#: common/forms.py:87 common/forms.py:125 +#: common/forms.py:90 common/forms.py:128 msgid "Use SSL" msgstr "使用SSL" -#: common/forms.py:88 +#: common/forms.py:91 msgid "If SMTP port is 465, may be select" msgstr "如果SMTP端口是465,通常需要启用SSL" -#: common/forms.py:91 +#: common/forms.py:94 msgid "Use TLS" msgstr "使用TLS" -#: common/forms.py:92 +#: common/forms.py:95 msgid "If SMTP port is 587, may be select" msgstr "如果SMTP端口是587,通常需要启用TLS" -#: common/forms.py:98 +#: common/forms.py:101 msgid "LDAP server" msgstr "LDAP地址" -#: common/forms.py:101 +#: common/forms.py:104 msgid "Bind DN" msgstr "绑定DN" -#: common/forms.py:108 +#: common/forms.py:111 msgid "User OU" msgstr "用户OU" -#: common/forms.py:109 +#: common/forms.py:112 msgid "Use | split User OUs" msgstr "使用|分隔各OU" -#: common/forms.py:112 +#: common/forms.py:115 msgid "User search filter" msgstr "用户过滤器" -#: common/forms.py:113 +#: common/forms.py:116 #, python-format msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)" msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)" -#: common/forms.py:116 +#: common/forms.py:119 msgid "User attr map" msgstr "LDAP属性映射" -#: common/forms.py:118 +#: common/forms.py:121 msgid "" "User attr map present how to map LDAP user attr to jumpserver, username,name," "email is jumpserver attr" @@ -1876,125 +1874,125 @@ msgstr "" "用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name," "email 是jumpserver的属性" -#: common/forms.py:127 +#: common/forms.py:130 msgid "Enable LDAP auth" msgstr "启用LDAP认证" -#: common/forms.py:136 +#: common/forms.py:139 msgid "List sort by" msgstr "资产列表排序" -#: common/forms.py:139 +#: common/forms.py:142 msgid "Heartbeat interval" msgstr "心跳间隔" -#: common/forms.py:139 ops/models/adhoc.py:38 +#: common/forms.py:142 ops/models/adhoc.py:38 msgid "Units: seconds" msgstr "单位: 秒" -#: common/forms.py:142 +#: common/forms.py:145 msgid "Password auth" msgstr "密码认证" -#: common/forms.py:145 +#: common/forms.py:148 msgid "Public key auth" msgstr "密钥认证" -#: common/forms.py:148 common/templates/common/terminal_setting.html:68 +#: common/forms.py:151 common/templates/common/terminal_setting.html:68 #: terminal/forms.py:30 terminal/models.py:22 msgid "Command storage" msgstr "命令存储" -#: common/forms.py:149 +#: common/forms.py:152 msgid "" "Set terminal storage setting, `default` is the using as default,You can set " "other storage and some terminal using" msgstr "设置终端命令存储,default是默认用的存储方式" -#: common/forms.py:154 common/templates/common/terminal_setting.html:86 +#: common/forms.py:157 common/templates/common/terminal_setting.html:86 #: terminal/forms.py:35 terminal/models.py:23 msgid "Replay storage" msgstr "录像存储" -#: common/forms.py:155 +#: common/forms.py:158 msgid "" "Set replay storage setting, `default` is the using as default,You can set " "other storage and some terminal using" msgstr "设置终端录像存储,default是默认用的存储方式" -#: common/forms.py:165 +#: common/forms.py:168 msgid "MFA Secondary certification" msgstr "MFA 二次认证" -#: common/forms.py:167 +#: common/forms.py:170 msgid "" "After opening, the user login must use MFA secondary authentication (valid " "for all users, including administrators)" msgstr "开启后,用户登录必须使用MFA二次认证(对所有用户有效,包括管理员)" -#: common/forms.py:174 +#: common/forms.py:177 msgid "Limit the number of login failures" msgstr "限制登录失败次数" -#: common/forms.py:179 +#: common/forms.py:182 msgid "No logon interval" msgstr "禁止登录时间间隔" -#: common/forms.py:181 +#: common/forms.py:184 msgid "" "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." msgstr "" "提示: (单位: 分钟) 当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录." -#: common/forms.py:187 +#: common/forms.py:190 msgid "Connection max idle time" msgstr "SSH最大空闲时间" -#: common/forms.py:189 +#: common/forms.py:192 msgid "" "If idle time more than it, disconnect connection(only ssh now) Unit: minute" msgstr "提示: (单位: 分钟) 如果超过该配置没有操作,连接会被断开(仅ssh) " -#: common/forms.py:195 +#: common/forms.py:198 msgid "Password minimum length" msgstr "密码最小长度 " -#: common/forms.py:201 +#: common/forms.py:204 msgid "Must contain capital letters" msgstr "必须包含大写字母" -#: common/forms.py:203 +#: common/forms.py:206 msgid "" "After opening, the user password changes and resets must contain uppercase " "letters" msgstr "开启后,用户密码修改、重置必须包含大写字母" -#: common/forms.py:209 +#: common/forms.py:212 msgid "Must contain lowercase letters" msgstr "必须包含小写字母" -#: common/forms.py:210 +#: common/forms.py:213 msgid "" "After opening, the user password changes and resets must contain lowercase " "letters" msgstr "开启后,用户密码修改、重置必须包含小写字母" -#: common/forms.py:216 +#: common/forms.py:219 msgid "Must contain numeric characters" msgstr "必须包含数字字符" -#: common/forms.py:217 +#: common/forms.py:220 msgid "" "After opening, the user password changes and resets must contain numeric " "characters" msgstr "开启后,用户密码修改、重置必须包含数字字符" -#: common/forms.py:223 +#: common/forms.py:226 msgid "Must contain special characters" msgstr "必须包含特殊字符" -#: common/forms.py:224 +#: common/forms.py:227 msgid "" "After opening, the user password changes and resets must contain special " "characters" @@ -2332,7 +2330,7 @@ msgstr "任务列表" msgid "Task run history" msgstr "执行历史" -#: orgs/mixins.py:79 orgs/models.py:24 +#: orgs/mixins.py:78 orgs/models.py:24 msgid "Organization" msgstr "组织管理" @@ -2577,7 +2575,7 @@ msgstr "命令记录" msgid "Web terminal" msgstr "Web终端" -#: templates/_nav.html:53 +#: templates/_nav.html:53 templates/_nav_user.html:19 msgid "File manager" msgstr "文件管理" @@ -3189,8 +3187,8 @@ msgstr "用户名/密码 校验失败" msgid "MFA authentication failed" msgstr "MFA 认证失败" -#: users/models/authentication.py:67 xpack/plugins/cloud/models.py:176 -#: xpack/plugins/cloud/models.py:190 +#: users/models/authentication.py:67 xpack/plugins/cloud/models.py:184 +#: xpack/plugins/cloud/models.py:198 msgid "Failed" msgstr "失败" @@ -3270,7 +3268,7 @@ msgstr "安全令牌验证" #: users/templates/users/_base_otp.html:44 users/templates/users/_user.html:13 #: users/templates/users/user_profile_update.html:51 -#: xpack/plugins/cloud/models.py:129 +#: xpack/plugins/cloud/models.py:51 xpack/plugins/cloud/models.py:133 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:59 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:13 msgid "Account" @@ -4108,61 +4106,61 @@ msgstr "" msgid "Validity" msgstr "账户状态" -#: xpack/plugins/cloud/models.py:130 +#: xpack/plugins/cloud/models.py:134 msgid "Regions" msgstr "地域" -#: xpack/plugins/cloud/models.py:131 +#: xpack/plugins/cloud/models.py:135 msgid "Instances" msgstr "实例" -#: xpack/plugins/cloud/models.py:135 +#: xpack/plugins/cloud/models.py:139 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:75 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:17 msgid "Date last sync" msgstr "最后同步日期" -#: xpack/plugins/cloud/models.py:177 xpack/plugins/cloud/models.py:191 -msgid "Succeed" -msgstr "成功" - -#: xpack/plugins/cloud/models.py:178 -msgid "Partial succeed" -msgstr "" - -#: xpack/plugins/cloud/models.py:181 +#: xpack/plugins/cloud/models.py:145 xpack/plugins/cloud/models.py:189 msgid "Sync instance task" msgstr "同步实例任务" -#: xpack/plugins/cloud/models.py:182 +#: xpack/plugins/cloud/models.py:185 xpack/plugins/cloud/models.py:199 +msgid "Succeed" +msgstr "成功" + +#: xpack/plugins/cloud/models.py:186 +msgid "Partial succeed" +msgstr "" + +#: xpack/plugins/cloud/models.py:190 msgid "Result" msgstr "结果" -#: xpack/plugins/cloud/models.py:185 xpack/plugins/cloud/models.py:201 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:69 +#: xpack/plugins/cloud/models.py:193 xpack/plugins/cloud/models.py:209 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:71 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:68 msgid "Date sync" msgstr "同步日期" -#: xpack/plugins/cloud/models.py:192 +#: xpack/plugins/cloud/models.py:200 msgid "Exist" msgstr "存在" -#: xpack/plugins/cloud/models.py:195 +#: xpack/plugins/cloud/models.py:203 msgid "Sync task" msgstr "同步任务" -#: xpack/plugins/cloud/models.py:196 +#: xpack/plugins/cloud/models.py:204 msgid "Sync instance task history" msgstr "同步实例任务历史" -#: xpack/plugins/cloud/models.py:197 +#: xpack/plugins/cloud/models.py:205 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:91 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:63 msgid "Instance" msgstr "实例" -#: xpack/plugins/cloud/models.py:198 +#: xpack/plugins/cloud/models.py:206 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:83 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:64 msgid "Region" @@ -4233,39 +4231,39 @@ msgid "Load failed" msgstr "加载失败" #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:22 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:23 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:25 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:23 #: xpack/plugins/cloud/views.py:122 msgid "Sync task detail" msgstr "同步任务详情" #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:25 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:26 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:28 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:26 #: xpack/plugins/cloud/views.py:137 msgid "Sync task history" msgstr "同步历史列表" #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:28 -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:29 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:31 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:29 #: xpack/plugins/cloud/views.py:180 msgid "Sync instance list" msgstr "同步实例列表" -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:63 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:65 msgid "Total count" msgstr "总数" -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:64 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:66 msgid "Succeed count" msgstr "成功" -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:65 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:67 msgid "Failed count" msgstr "失败" -#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:66 +#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:68 msgid "Exist count" msgstr "存在" diff --git a/apps/perms/api.py b/apps/perms/api.py index bfc22bf4d..910ffb7f9 100644 --- a/apps/perms/api.py +++ b/apps/perms/api.py @@ -96,7 +96,7 @@ class UserGrantedNodesApi(ListAPIView): """ 查询用户授权的所有节点的API, 如果是超级用户或者是 app,切换到root org """ - permission_classes = (IsOrgAdmin,) + permission_classes = (IsOrgAdminOrAppUser,) serializer_class = NodeSerializer def change_org_if_need(self):