mirror of https://github.com/jumpserver/jumpserver
				
				
				
			[Update] 修改约束
							parent
							
								
									fd5f562cbf
								
							
						
					
					
						commit
						c24f1a0517
					
				| 
						 | 
				
			
			@ -13,7 +13,7 @@
 | 
			
		|||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
from rest_framework import generics, mixins
 | 
			
		||||
from rest_framework import generics, mixins, viewsets
 | 
			
		||||
from rest_framework.serializers import ValidationError
 | 
			
		||||
from rest_framework.views import APIView
 | 
			
		||||
from rest_framework.response import Response
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,7 @@ from django.utils.translation import ugettext_lazy as _
 | 
			
		|||
from django.shortcuts import get_object_or_404
 | 
			
		||||
 | 
			
		||||
from common.utils import get_logger, get_object_or_none
 | 
			
		||||
from orgs.utils import get_current_org
 | 
			
		||||
from ..hands import IsSuperUser
 | 
			
		||||
from ..models import Node
 | 
			
		||||
from ..tasks import update_assets_hardware_info_util, test_asset_connectability_util
 | 
			
		||||
| 
						 | 
				
			
			@ -37,11 +38,18 @@ __all__ = [
 | 
			
		|||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class NodeViewSet(BulkModelViewSet):
 | 
			
		||||
class NodeViewSet(viewsets.ModelViewSet):
 | 
			
		||||
    queryset = Node.objects.all()
 | 
			
		||||
    permission_classes = (IsSuperUser,)
 | 
			
		||||
    serializer_class = serializers.NodeSerializer
 | 
			
		||||
 | 
			
		||||
    def get_queryset(self):
 | 
			
		||||
        # queryset = super(NodeViewSet, self).get_queryset()
 | 
			
		||||
        print("API GET QUWRYSET")
 | 
			
		||||
        # print(get_current_org())
 | 
			
		||||
        # print(queryset)
 | 
			
		||||
        return Node.objects.all()
 | 
			
		||||
 | 
			
		||||
    def perform_create(self, serializer):
 | 
			
		||||
        child_key = Node.root().get_next_child_key()
 | 
			
		||||
        serializer.validated_data["key"] = child_key
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -225,7 +225,7 @@ class Asset(OrgModelMixin):
 | 
			
		|||
        return data
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ('org', 'hostname')
 | 
			
		||||
        unique_together = [('org', 'hostname'),]
 | 
			
		||||
        verbose_name = _("Asset")
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,4 +52,4 @@ class Gateway(AssetUser, OrgModelMixin):
 | 
			
		|||
        return self.name
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        unique_together = ['name', 'org']
 | 
			
		||||
        unique_together = [('name', 'org')]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,4 +34,4 @@ class Label(models.Model):
 | 
			
		|||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        db_table = "assets_label"
 | 
			
		||||
        unique_together = ('name', 'value')
 | 
			
		||||
        unique_together = [('name', 'value'),]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,8 @@ class Node(OrgModelMixin):
 | 
			
		|||
    is_node = True
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.full_value
 | 
			
		||||
        return self.value
 | 
			
		||||
        # return self.full_value
 | 
			
		||||
 | 
			
		||||
    def __eq__(self, other):
 | 
			
		||||
        return self.key == other.key
 | 
			
		||||
| 
						 | 
				
			
			@ -181,8 +182,8 @@ class Node(OrgModelMixin):
 | 
			
		|||
    @classmethod
 | 
			
		||||
    def root(cls):
 | 
			
		||||
        root = cls.objects.filter(key__regex=r'^[0-9]+$')
 | 
			
		||||
        if len(root) == 1:
 | 
			
		||||
            return root.get()
 | 
			
		||||
        if root:
 | 
			
		||||
            return root[0]
 | 
			
		||||
        else:
 | 
			
		||||
            return cls.create_root_node()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,7 +69,7 @@ class AdminUser(AssetUser):
 | 
			
		|||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ['name']
 | 
			
		||||
        unique_together = ['name', 'org']
 | 
			
		||||
        unique_together = [('name', 'org'),]
 | 
			
		||||
        verbose_name = _("Admin user")
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +157,7 @@ class SystemUser(AssetUser):
 | 
			
		|||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ['name']
 | 
			
		||||
        unique_together = ['name', 'org']
 | 
			
		||||
        unique_together = [('name', 'org'),]
 | 
			
		||||
        verbose_name = _("System user")
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,6 +31,7 @@ class NodeGrantedSerializer(BulkSerializerMixin, serializers.ModelSerializer):
 | 
			
		|||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_assets_amount(obj):
 | 
			
		||||
        return 1
 | 
			
		||||
        return len(obj.assets_granted)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +40,7 @@ class NodeGrantedSerializer(BulkSerializerMixin, serializers.ModelSerializer):
 | 
			
		|||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_parent(obj):
 | 
			
		||||
        return '0'
 | 
			
		||||
        return obj.parent.id
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,10 +234,10 @@ LOGGING = {
 | 
			
		|||
            'handlers': ['console', 'ansible_logs'],
 | 
			
		||||
            'level': "INFO",
 | 
			
		||||
        },
 | 
			
		||||
        # 'django.db': {
 | 
			
		||||
        #     'handlers': ['console', 'file'],
 | 
			
		||||
        #     'level': 'DEBUG'
 | 
			
		||||
        # }
 | 
			
		||||
        'django.db': {
 | 
			
		||||
            'handlers': ['console', 'file'],
 | 
			
		||||
            'level': 'DEBUG'
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ from django.forms import ModelForm
 | 
			
		|||
 | 
			
		||||
from common.utils import get_logger
 | 
			
		||||
from .utils import get_current_org, set_current_org
 | 
			
		||||
from .models import Organization
 | 
			
		||||
 | 
			
		||||
logger = get_logger(__file__)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,19 +33,21 @@ class OrgManager(models.Manager):
 | 
			
		|||
        queryset = super(OrgManager, self).get_queryset()
 | 
			
		||||
        queryset = queryset.filter(**kwargs)
 | 
			
		||||
        # print(kwargs)
 | 
			
		||||
        print(queryset.query)
 | 
			
		||||
        # print(queryset.query)
 | 
			
		||||
        return queryset
 | 
			
		||||
 | 
			
		||||
    def all(self):
 | 
			
		||||
        current_org = get_current_org()
 | 
			
		||||
        if not current_org:
 | 
			
		||||
            msg = 'You can `objects.set_current_org(org).all()` then run it'
 | 
			
		||||
            warnings.warn(msg)
 | 
			
		||||
            return self
 | 
			
		||||
        else:
 | 
			
		||||
            return super(OrgManager, self).all()
 | 
			
		||||
    # def all(self):
 | 
			
		||||
    #     current_org = get_current_org()
 | 
			
		||||
    #     if not current_org:
 | 
			
		||||
    #         msg = 'You can `objects.set_current_org(org).all()` then run it'
 | 
			
		||||
    #         warnings.warn(msg)
 | 
			
		||||
    #         return self
 | 
			
		||||
    #     else:
 | 
			
		||||
    #         return super(OrgManager, self).all()
 | 
			
		||||
 | 
			
		||||
    def set_current_org(self, org):
 | 
			
		||||
        if isinstance(org, str):
 | 
			
		||||
            org = Organization.objects.get(name=org)
 | 
			
		||||
        set_current_org(org)
 | 
			
		||||
        return self
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
 | 
			
		|||
 | 
			
		||||
class Organization(models.Model):
 | 
			
		||||
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
 | 
			
		||||
    name = models.CharField(max_length=128, verbose_name=_("Name"))
 | 
			
		||||
    name = models.CharField(max_length=128, unique=True, verbose_name=_("Name"))
 | 
			
		||||
    users = models.ManyToManyField('users.User', related_name='orgs', blank=True)
 | 
			
		||||
    admins = models.ManyToManyField('users.User', related_name='admin_orgs', blank=True)
 | 
			
		||||
    created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ class UserGroup(OrgModelMixin):
 | 
			
		|||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ['name']
 | 
			
		||||
        unique_together = ['org', 'name']
 | 
			
		||||
        unique_together = [('org', 'name'),]
 | 
			
		||||
        verbose_name = _("User group")
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue