mirror of https://github.com/jumpserver/jumpserver
				
				
				
			[Update] 优化节点删除 API,添加删除失败原因
							parent
							
								
									7e7583e4fc
								
							
						
					
					
						commit
						5f96f8c229
					
				| 
						 | 
				
			
			@ -13,7 +13,7 @@
 | 
			
		|||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
from rest_framework import generics
 | 
			
		||||
from rest_framework import generics, status
 | 
			
		||||
from rest_framework.serializers import ValidationError
 | 
			
		||||
from rest_framework.views import APIView
 | 
			
		||||
from rest_framework.response import Response
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +59,16 @@ class NodeViewSet(OrgModelViewSet):
 | 
			
		|||
            raise ValidationError({"error": msg})
 | 
			
		||||
        return super().perform_update(serializer)
 | 
			
		||||
 | 
			
		||||
    def destroy(self, request, *args, **kwargs):
 | 
			
		||||
        node = self.get_object()
 | 
			
		||||
        if node.has_children_or_contains_assets():
 | 
			
		||||
            msg = _("Deletion failed "
 | 
			
		||||
                    "and the node contains children or assets")
 | 
			
		||||
            return Response(
 | 
			
		||||
                data={'msg': msg}, status=status.HTTP_500_INTERNAL_SERVER_ERROR
 | 
			
		||||
            )
 | 
			
		||||
        return super().destroy(request, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class NodeListAsTreeApi(generics.ListAPIView):
 | 
			
		||||
    """
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -470,8 +470,13 @@ class Node(OrgModelMixin, SomeNodesMixin, TreeMixin, FamilyMixin, FullValueMixin
 | 
			
		|||
        tree_node = TreeNode(**data)
 | 
			
		||||
        return tree_node
 | 
			
		||||
 | 
			
		||||
    def delete(self, using=None, keep_parents=False):
 | 
			
		||||
    def has_children_or_contains_assets(self):
 | 
			
		||||
        if self.children or self.get_assets():
 | 
			
		||||
            return True
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
    def delete(self, using=None, keep_parents=False):
 | 
			
		||||
        if self.has_children_or_contains_assets():
 | 
			
		||||
            return
 | 
			
		||||
        return super().delete(using=using, keep_parents=keep_parents)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -8,7 +8,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Jumpserver 0.3.3\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2019-10-08 17:09+0800\n"
 | 
			
		||||
"POT-Creation-Date: 2019-10-10 16:15+0800\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
 | 
			
		||||
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ msgstr "资产"
 | 
			
		|||
#: applications/templates/applications/user_remote_app_list.html:16
 | 
			
		||||
#: assets/forms/asset.py:24 assets/forms/domain.py:73 assets/forms/user.py:74
 | 
			
		||||
#: assets/forms/user.py:94 assets/models/base.py:28 assets/models/cluster.py:18
 | 
			
		||||
#: assets/models/cmd_filter.py:20 assets/models/domain.py:20
 | 
			
		||||
#: assets/models/cmd_filter.py:21 assets/models/domain.py:20
 | 
			
		||||
#: assets/models/group.py:20 assets/models/label.py:18
 | 
			
		||||
#: assets/templates/assets/admin_user_detail.html:56
 | 
			
		||||
#: assets/templates/assets/admin_user_list.html:44
 | 
			
		||||
| 
						 | 
				
			
			@ -186,8 +186,8 @@ msgstr "参数"
 | 
			
		|||
#: applications/models/remote_app.py:39
 | 
			
		||||
#: applications/templates/applications/remote_app_detail.html:73
 | 
			
		||||
#: assets/models/asset.py:174 assets/models/base.py:36
 | 
			
		||||
#: assets/models/cluster.py:28 assets/models/cmd_filter.py:25
 | 
			
		||||
#: assets/models/cmd_filter.py:58 assets/models/group.py:21
 | 
			
		||||
#: assets/models/cluster.py:28 assets/models/cmd_filter.py:26
 | 
			
		||||
#: assets/models/cmd_filter.py:59 assets/models/group.py:21
 | 
			
		||||
#: assets/templates/assets/admin_user_detail.html:68
 | 
			
		||||
#: assets/templates/assets/asset_detail.html:124
 | 
			
		||||
#: assets/templates/assets/cmd_filter_detail.html:77
 | 
			
		||||
| 
						 | 
				
			
			@ -238,8 +238,8 @@ msgstr "创建日期"
 | 
			
		|||
#: applications/templates/applications/remote_app_list.html:23
 | 
			
		||||
#: applications/templates/applications/user_remote_app_list.html:19
 | 
			
		||||
#: assets/models/asset.py:176 assets/models/base.py:33
 | 
			
		||||
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:22
 | 
			
		||||
#: assets/models/cmd_filter.py:55 assets/models/domain.py:21
 | 
			
		||||
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:23
 | 
			
		||||
#: assets/models/cmd_filter.py:56 assets/models/domain.py:21
 | 
			
		||||
#: assets/models/domain.py:53 assets/models/group.py:23
 | 
			
		||||
#: assets/models/label.py:23 assets/templates/assets/admin_user_detail.html:72
 | 
			
		||||
#: assets/templates/assets/admin_user_list.html:50
 | 
			
		||||
| 
						 | 
				
			
			@ -498,7 +498,7 @@ msgstr "创建远程应用"
 | 
			
		|||
 | 
			
		||||
#: applications/templates/applications/remote_app_list.html:24
 | 
			
		||||
#: applications/templates/applications/user_remote_app_list.html:20
 | 
			
		||||
#: assets/models/cmd_filter.py:54
 | 
			
		||||
#: assets/models/cmd_filter.py:55
 | 
			
		||||
#: assets/templates/assets/_asset_user_list.html:25
 | 
			
		||||
#: assets/templates/assets/admin_user_list.html:51
 | 
			
		||||
#: assets/templates/assets/asset_list.html:100
 | 
			
		||||
| 
						 | 
				
			
			@ -568,11 +568,15 @@ msgstr "我的远程应用"
 | 
			
		|||
msgid "You can't update the root node name"
 | 
			
		||||
msgstr "不能修改根节点名称"
 | 
			
		||||
 | 
			
		||||
#: assets/api/node.py:266
 | 
			
		||||
#: assets/api/node.py:65
 | 
			
		||||
msgid "Deletion failed and the node contains children or assets"
 | 
			
		||||
msgstr "删除失败,节点包含子节点或资产"
 | 
			
		||||
 | 
			
		||||
#: assets/api/node.py:276
 | 
			
		||||
msgid "Update node asset hardware information: {}"
 | 
			
		||||
msgstr "更新节点资产硬件信息: {}"
 | 
			
		||||
 | 
			
		||||
#: assets/api/node.py:280
 | 
			
		||||
#: assets/api/node.py:290
 | 
			
		||||
msgid "Test if the assets under the node are connectable: {}"
 | 
			
		||||
msgstr "测试节点下资产是否可连接: {}"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -745,7 +749,7 @@ msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥"
 | 
			
		|||
msgid "Password and private key file must be input one"
 | 
			
		||||
msgstr "密码和私钥, 必须输入一个"
 | 
			
		||||
 | 
			
		||||
#: assets/forms/user.py:97 assets/models/cmd_filter.py:31
 | 
			
		||||
#: assets/forms/user.py:97 assets/models/cmd_filter.py:32
 | 
			
		||||
#: assets/models/user.py:118 assets/templates/assets/_system_user.html:66
 | 
			
		||||
#: assets/templates/assets/system_user_detail.html:165
 | 
			
		||||
msgid "Command filter"
 | 
			
		||||
| 
						 | 
				
			
			@ -828,7 +832,7 @@ msgid "Platform"
 | 
			
		|||
msgstr "系统平台"
 | 
			
		||||
 | 
			
		||||
#: assets/models/asset.py:146 assets/models/authbook.py:27
 | 
			
		||||
#: assets/models/cmd_filter.py:21 assets/models/domain.py:54
 | 
			
		||||
#: assets/models/cmd_filter.py:22 assets/models/domain.py:54
 | 
			
		||||
#: assets/models/label.py:22 assets/templates/assets/asset_detail.html:112
 | 
			
		||||
msgid "Is active"
 | 
			
		||||
msgstr "激活"
 | 
			
		||||
| 
						 | 
				
			
			@ -994,11 +998,11 @@ msgstr "北京电信"
 | 
			
		|||
msgid "BGP full netcom"
 | 
			
		||||
msgstr "BGP全网通"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:38
 | 
			
		||||
#: assets/models/cmd_filter.py:39
 | 
			
		||||
msgid "Regex"
 | 
			
		||||
msgstr "正则表达式"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:39 ops/models/command.py:21
 | 
			
		||||
#: assets/models/cmd_filter.py:40 ops/models/command.py:21
 | 
			
		||||
#: ops/templates/ops/command_execution_list.html:64 terminal/models.py:163
 | 
			
		||||
#: terminal/templates/terminal/command_list.html:28
 | 
			
		||||
#: terminal/templates/terminal/command_list.html:68
 | 
			
		||||
| 
						 | 
				
			
			@ -1007,19 +1011,19 @@ msgstr "正则表达式"
 | 
			
		|||
msgid "Command"
 | 
			
		||||
msgstr "命令"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:44
 | 
			
		||||
#: assets/models/cmd_filter.py:45
 | 
			
		||||
msgid "Deny"
 | 
			
		||||
msgstr "拒绝"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:45
 | 
			
		||||
#: assets/models/cmd_filter.py:46
 | 
			
		||||
msgid "Allow"
 | 
			
		||||
msgstr "允许"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:49
 | 
			
		||||
#: assets/models/cmd_filter.py:50
 | 
			
		||||
msgid "Filter"
 | 
			
		||||
msgstr "过滤器"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:50
 | 
			
		||||
#: assets/models/cmd_filter.py:51
 | 
			
		||||
#: assets/templates/assets/cmd_filter_rule_list.html:58
 | 
			
		||||
#: audits/templates/audits/login_log_list.html:58
 | 
			
		||||
#: perms/templates/perms/remote_app_permission_remote_app.html:54
 | 
			
		||||
| 
						 | 
				
			
			@ -1030,26 +1034,26 @@ msgstr "过滤器"
 | 
			
		|||
msgid "Type"
 | 
			
		||||
msgstr "类型"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:51 assets/models/user.py:112
 | 
			
		||||
#: assets/models/cmd_filter.py:52 assets/models/user.py:112
 | 
			
		||||
#: assets/templates/assets/cmd_filter_rule_list.html:60
 | 
			
		||||
msgid "Priority"
 | 
			
		||||
msgstr "优先级"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:51
 | 
			
		||||
#: assets/models/cmd_filter.py:52
 | 
			
		||||
msgid "1-100, the higher will be match first"
 | 
			
		||||
msgstr "优先级可选范围为1-100,1最低优先级,100最高优先级"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:53
 | 
			
		||||
#: assets/models/cmd_filter.py:54
 | 
			
		||||
#: assets/templates/assets/cmd_filter_rule_list.html:59
 | 
			
		||||
#: xpack/plugins/license/models.py:29
 | 
			
		||||
msgid "Content"
 | 
			
		||||
msgstr "内容"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:53
 | 
			
		||||
#: assets/models/cmd_filter.py:54
 | 
			
		||||
msgid "One line one command"
 | 
			
		||||
msgstr "每行一个命令"
 | 
			
		||||
 | 
			
		||||
#: assets/models/cmd_filter.py:64
 | 
			
		||||
#: assets/models/cmd_filter.py:63
 | 
			
		||||
msgid "Command filter rule"
 | 
			
		||||
msgstr "命令过滤规则"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1208,16 +1212,16 @@ msgstr "系统用户"
 | 
			
		|||
msgid "%(value)s is not an even number"
 | 
			
		||||
msgstr "%(value)s is not an even number"
 | 
			
		||||
 | 
			
		||||
#: assets/models/utils.py:43 assets/tasks/const.py:81
 | 
			
		||||
#: assets/models/utils.py:43 assets/tasks/const.py:84
 | 
			
		||||
msgid "Unreachable"
 | 
			
		||||
msgstr "不可达"
 | 
			
		||||
 | 
			
		||||
#: assets/models/utils.py:44 assets/tasks/const.py:82
 | 
			
		||||
#: assets/models/utils.py:44 assets/tasks/const.py:85
 | 
			
		||||
#: assets/templates/assets/asset_list.html:99
 | 
			
		||||
msgid "Reachable"
 | 
			
		||||
msgstr "可连接"
 | 
			
		||||
 | 
			
		||||
#: assets/models/utils.py:45 assets/tasks/const.py:83
 | 
			
		||||
#: assets/models/utils.py:45 assets/tasks/const.py:86
 | 
			
		||||
#: authentication/utils.py:13 xpack/plugins/license/models.py:78
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "未知"
 | 
			
		||||
| 
						 | 
				
			
			@ -1424,6 +1428,7 @@ msgstr "资产列表"
 | 
			
		|||
#: assets/templates/assets/_asset_list_modal.html:33
 | 
			
		||||
#: assets/templates/assets/_node_tree.html:40
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:49
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:143
 | 
			
		||||
#: users/templates/users/_granted_assets.html:7
 | 
			
		||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:66
 | 
			
		||||
msgid "Loading"
 | 
			
		||||
| 
						 | 
				
			
			@ -1639,7 +1644,7 @@ msgstr "选择节点"
 | 
			
		|||
#: assets/templates/assets/system_user_list.html:139
 | 
			
		||||
#: authentication/templates/authentication/_mfa_confirm_modal.html:20
 | 
			
		||||
#: settings/templates/settings/terminal_setting.html:168
 | 
			
		||||
#: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:108
 | 
			
		||||
#: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:112
 | 
			
		||||
#: users/templates/users/user_detail.html:394
 | 
			
		||||
#: users/templates/users/user_detail.html:420
 | 
			
		||||
#: users/templates/users/user_detail.html:443
 | 
			
		||||
| 
						 | 
				
			
			@ -1720,7 +1725,7 @@ msgstr "资产用户"
 | 
			
		|||
 | 
			
		||||
#: assets/templates/assets/asset_asset_user_list.html:47
 | 
			
		||||
#: assets/templates/assets/asset_detail.html:144
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:81
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:85
 | 
			
		||||
#: users/templates/users/user_detail.html:140
 | 
			
		||||
#: users/templates/users/user_profile.html:150
 | 
			
		||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:128
 | 
			
		||||
| 
						 | 
				
			
			@ -2984,38 +2989,38 @@ msgid "Task log"
 | 
			
		|||
msgstr "任务列表"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:90
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:91
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:100
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:95
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:104
 | 
			
		||||
msgid "Go"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:215
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:216
 | 
			
		||||
msgid "Selected assets"
 | 
			
		||||
msgstr "已选择资产"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:218
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:219
 | 
			
		||||
msgid "In total"
 | 
			
		||||
msgstr "总共"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:254
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:256
 | 
			
		||||
msgid ""
 | 
			
		||||
"Select the left asset, select the running system user, execute command in "
 | 
			
		||||
"batch"
 | 
			
		||||
msgstr "选择左侧资产, 选择运行的系统用户,批量执行命令"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:275
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:299
 | 
			
		||||
msgid "Unselected assets"
 | 
			
		||||
msgstr "没有选中资产"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:279
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:303
 | 
			
		||||
msgid "No input command"
 | 
			
		||||
msgstr "没有输入命令"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:283
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:307
 | 
			
		||||
msgid "No system user was selected"
 | 
			
		||||
msgstr "没有选择系统用户"
 | 
			
		||||
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:328
 | 
			
		||||
#: ops/templates/ops/command_execution_create.html:317
 | 
			
		||||
msgid "Pending"
 | 
			
		||||
msgstr "等待"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3394,21 +3399,21 @@ msgstr "连接LDAP成功"
 | 
			
		|||
msgid "Match {} s users"
 | 
			
		||||
msgstr "匹配 {} 个用户"
 | 
			
		||||
 | 
			
		||||
#: settings/api.py:163
 | 
			
		||||
#: settings/api.py:151
 | 
			
		||||
msgid "succeed: {} failed: {} total: {}"
 | 
			
		||||
msgstr "成功:{} 失败:{} 总数:{}"
 | 
			
		||||
 | 
			
		||||
#: settings/api.py:185 settings/api.py:221
 | 
			
		||||
#: settings/api.py:173 settings/api.py:209
 | 
			
		||||
msgid ""
 | 
			
		||||
"Error: Account invalid (Please make sure the information such as Access key "
 | 
			
		||||
"or Secret key is correct)"
 | 
			
		||||
msgstr "错误:账户无效 (请确保 Access key 或 Secret key 等信息正确)"
 | 
			
		||||
 | 
			
		||||
#: settings/api.py:191 settings/api.py:227
 | 
			
		||||
#: settings/api.py:179 settings/api.py:215
 | 
			
		||||
msgid "Create succeed"
 | 
			
		||||
msgstr "创建成功"
 | 
			
		||||
 | 
			
		||||
#: settings/api.py:209 settings/api.py:247
 | 
			
		||||
#: settings/api.py:197 settings/api.py:235
 | 
			
		||||
#: settings/templates/settings/terminal_setting.html:154
 | 
			
		||||
msgid "Delete succeed"
 | 
			
		||||
msgstr "删除成功"
 | 
			
		||||
| 
						 | 
				
			
			@ -3923,11 +3928,11 @@ msgstr "删除失败"
 | 
			
		|||
msgid "Are you sure about deleting it?"
 | 
			
		||||
msgstr "您确定删除吗?"
 | 
			
		||||
 | 
			
		||||
#: settings/utils.py:91
 | 
			
		||||
#: settings/utils.py:98
 | 
			
		||||
msgid "Search no entry matched in ou {}"
 | 
			
		||||
msgstr "在ou:{}中没有匹配条目"
 | 
			
		||||
 | 
			
		||||
#: settings/utils.py:146
 | 
			
		||||
#: settings/utils.py:172
 | 
			
		||||
msgid "The user source is not LDAP"
 | 
			
		||||
msgstr "用户来源不是LDAP"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4404,7 +4409,7 @@ msgstr "参数"
 | 
			
		|||
msgid "Export command"
 | 
			
		||||
msgstr "导出命令"
 | 
			
		||||
 | 
			
		||||
#: terminal/templates/terminal/command_list.html:191
 | 
			
		||||
#: terminal/templates/terminal/command_list.html:205
 | 
			
		||||
msgid "Goto"
 | 
			
		||||
msgstr "转到"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4418,19 +4423,19 @@ msgstr "会话详情"
 | 
			
		|||
msgid "Command list"
 | 
			
		||||
msgstr "命令记录列表"
 | 
			
		||||
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:63
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:67
 | 
			
		||||
msgid "There is no command about this session"
 | 
			
		||||
msgstr "该会话没有命令记录"
 | 
			
		||||
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:88
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:92
 | 
			
		||||
msgid "Replay session"
 | 
			
		||||
msgstr "回放会话"
 | 
			
		||||
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:97
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:101
 | 
			
		||||
msgid "Monitor session"
 | 
			
		||||
msgstr "监控"
 | 
			
		||||
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:105
 | 
			
		||||
#: terminal/templates/terminal/session_detail.html:109
 | 
			
		||||
msgid "Terminate session"
 | 
			
		||||
msgstr "终止会话"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue