diff --git a/apps/assets/api.py b/apps/assets/api.py index e70a4e97b..adf7c3011 100644 --- a/apps/assets/api.py +++ b/apps/assets/api.py @@ -318,7 +318,7 @@ class NodeViewSet(BulkModelViewSet): serializer_class = serializers.NodeSerializer def perform_create(self, serializer): - child_id = Node.get_root_node().get_next_child_id() + child_id = Node.root().get_next_child_id() serializer.validated_data["id"] = child_id serializer.save() @@ -332,7 +332,7 @@ class NodeChildrenApi(mixins.ListModelMixin, generics.CreateAPIView): def post(self, request, *args, **kwargs): if not request.data.get("name"): request.data["name"] = _("New node {}").format( - Node.get_root_node().get_next_child_id().split(":")[-1] + Node.root().get_next_child_id().split(":")[-1] ) return super().post(request, *args, **kwargs) diff --git a/apps/assets/models/tree.py b/apps/assets/models/tree.py index 38455cd3f..121ace6d3 100644 --- a/apps/assets/models/tree.py +++ b/apps/assets/models/tree.py @@ -51,7 +51,7 @@ class Node(models.Model): return assets @classmethod - def get_root_node(cls): + def root(cls): obj, created = cls.objects.get_or_create( id='0', defaults={"id": '0', 'name': "ROOT"} ) diff --git a/apps/assets/templates/assets/tree.html b/apps/assets/templates/assets/tree.html index 532104f93..6e24423f3 100644 --- a/apps/assets/templates/assets/tree.html +++ b/apps/assets/templates/assets/tree.html @@ -43,9 +43,9 @@
-
-
-
Tree View
+
+
+{#
Tree View
#}
diff --git a/apps/perms/models.py b/apps/perms/models.py index 18e8ab6f2..080c405ac 100644 --- a/apps/perms/models.py +++ b/apps/perms/models.py @@ -67,3 +67,20 @@ class AssetPermission(models.Model): if cluster_remain: errors[system_user] = cluster_remain return errors + + +class NodePermission(models.Model): + node = models.ForeignKey('assets.Node', on_delete=models.CASCADE, verbose_name=_("Node")) + user_group = models.ForeignKey('users.UserGroup', on_delete=models.CASCADE, verbose_name=_("User group")) + system_user = models.ForeignKey('assets.SystemUser', on_delete=models.CASCADE, verbose_name=_("System user")) + is_active = models.BooleanField(default=True, verbose_name=_('Active')) + date_expired = models.DateTimeField(default=date_expired_default, verbose_name=_('Date expired')) + created_by = models.CharField(max_length=128, blank=True, verbose_name=_('Created by')) + date_created = models.DateTimeField(auto_now_add=True, verbose_name=_('Date created')) + comment = models.TextField(verbose_name=_('Comment'), blank=True) + + def __str__(self): + return "{}:{}:{}".format(self.node.name, self.user_group.name, self.system_user.name) + + class Meta: + unique_together = ('node', 'user_group', 'system_user') diff --git a/apps/static/css/plugins/ztree/awesomeStyle/fa.css b/apps/static/css/plugins/ztree/awesomeStyle/fa.css new file mode 100644 index 000000000..e69de29bb