diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py
index f123e4649af5e05080209a5ad8a7814fbe4d5744..39390447c79e3162642700b00f5dd399fe69f474 100644
--- a/apps/assets/api/node.py
+++ b/apps/assets/api/node.py
@@ -108,18 +108,18 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView):
         return node
 
     def get_queryset(self):
-        queryset = []
+        queryset = set()
         query_all = self.request.query_params.get("all")
         query_assets = self.request.query_params.get('assets')
         node = self.get_object()
         if node == Node.root():
-            queryset.append(node)
+            queryset.add(node)
         if query_all:
             children = node.get_all_children()
         else:
             children = node.get_children()
 
-        queryset.extend(list(children))
+        queryset.update(set(children))
         if query_assets:
             assets = node.get_assets()
             for asset in assets:
@@ -127,8 +127,9 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView):
                 node_fake.id = asset.id
                 node_fake.parent = node
                 node_fake.value = asset.hostname
-                node_fake.is_asset = True
-                queryset.append(node_fake)
+                node_fake.is_node = False
+                queryset.add(node_fake)
+        queryset = sorted(queryset, key=lambda x: x.is_node, reverse=True)
         return queryset
 
     def get(self, request, *args, **kwargs):
diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py
index ad806342be49c7fcc96b8ca994b8c61b10709206..1b765aefb8a26751fddd473416c8112410c6deb5 100644
--- a/apps/assets/models/node.py
+++ b/apps/assets/models/node.py
@@ -16,7 +16,7 @@ class Node(models.Model):
     child_mark = models.IntegerField(default=0)
     date_create = models.DateTimeField(auto_now_add=True)
 
-    is_asset = False
+    is_node = True
 
     def __str__(self):
         return self.full_value
diff --git a/apps/assets/serializers/node.py b/apps/assets/serializers/node.py
index 1c9c385e9ed4dba886201bc54d98522fa3d62206..5b58ff2410c0a4a6798bf980e57b8b0b7ca3ec8a 100644
--- a/apps/assets/serializers/node.py
+++ b/apps/assets/serializers/node.py
@@ -48,7 +48,7 @@ class NodeSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Node
-        fields = ['id', 'key', 'value', 'parent', 'assets_amount', 'is_asset']
+        fields = ['id', 'key', 'value', 'parent', 'assets_amount', 'is_node']
         list_serializer_class = BulkListSerializer
 
     @staticmethod
diff --git a/apps/perms/templates/perms/asset_permission_list.html b/apps/perms/templates/perms/asset_permission_list.html
index eccef77a263b8d7615e37c5a043955735efc370a..afec342690e92cc49cc03add0bcb60fe19765805 100644
--- a/apps/perms/templates/perms/asset_permission_list.html
+++ b/apps/perms/templates/perms/asset_permission_list.html
@@ -78,12 +78,12 @@ var zTree, table, show = 0;
 function onSelected(event, treeNode) {
     setCookie('node_selected', treeNode.id);
     var url = table.ajax.url();
-    if (treeNode.is_asset) {
-        url = setUrlParam(url, 'node', "");
-        url = setUrlParam(url, 'asset', treeNode.id)
-    } else {
+    if (treeNode.is_node) {
         url = setUrlParam(url, 'asset', "");
         url = setUrlParam(url, 'node', treeNode.id)
+    } else {
+        url = setUrlParam(url, 'node', "");
+        url = setUrlParam(url, 'asset', treeNode.id)
     }
     setCookie('node_selected', treeNode.id);
     table.ajax.url(url);
@@ -113,14 +113,14 @@ function filter(treeId, parentNode, childNodes) {
     $.each(childNodes, function (index, value) {
         value["pId"] = value["parent"];
         value["name"] = value["value"];
-        value["isParent"] = value["assets_amount"] !== 0;
-        value["iconSkin"] = value["is_asset"] ? "file" : null;
+        value["isParent"] = value["is_node"];
+        value["iconSkin"] = value["is_node"] ? null : 'file';
     });
     return childNodes;
 }
 
 function beforeAsync(treeId, treeNode) {
-	return true;
+    return treeNode.is_node
 }
 
 function makeLabel(data) {
@@ -226,7 +226,7 @@ function initTree() {
         },
         async: {
 			enable: true,
-			url: "{% url 'api-assets:node-children-2' %}?assets=1",
+			url: "{% url 'api-assets:node-children-2' %}?assets=1&all=1",
 			autoParam:["id", "name=n", "level=lv"],
 			dataFilter: filter,
             type: 'get'
@@ -238,12 +238,13 @@ function initTree() {
     };
 
     var zNodes = [];
-    $.get("{% url 'api-assets:node-children-2' %}", function(data, status){
+    $.get("{% url 'api-assets:node-children-2' %}?assets=1&all=1", function(data, status){
         $.each(data, function (index, value) {
             value["pId"] = value["parent"];
-            value["isParent"] = value["assets_amount"] !== 0;
             value["name"] = value["value"];
             value["open"] = value["key"] === "0";
+            value["isParent"] = value["is_node"];
+            value["iconSkin"] = value["is_node"] ? null : 'file';
         });
         zNodes = data;
         {#$.fn.zTree.init($("#assetTree"), setting);#}
@@ -286,10 +287,10 @@ $(document).ready(function(){
     var _nodes = [];
     var _assets = [];
     $.each(nodes, function (id, node) {
-        if (node.is_asset) {
-            _assets.push(node.id)
-        } else {
+        if (node.is_node) {
             _nodes.push(node.id)
+        } else {
+            _assets.push(node.id)
         }
     });
     url += "?assets=" + _assets.join(",") + "&nodes=" + _nodes.join(",");