mirror of https://github.com/jumpserver/jumpserver
fix(orgs): 添加旧的 member 相关 api
parent
75b886675e
commit
448c5db3bb
|
@ -2,17 +2,17 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.db.models import Q
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.views import Response
|
from rest_framework.views import Response
|
||||||
from rest_framework_bulk import BulkModelViewSet
|
from rest_framework_bulk import BulkModelViewSet
|
||||||
|
|
||||||
from common.permissions import IsSuperUserOrAppUser
|
from common.permissions import IsSuperUserOrAppUser
|
||||||
from common.drf.api import JMSBulkRelationModelViewSet, JMSModelViewSet
|
from common.drf.api import JMSBulkRelationModelViewSet
|
||||||
from .models import Organization, ROLE
|
from .models import Organization, ROLE
|
||||||
from .serializers import (
|
from .serializers import (
|
||||||
OrgSerializer, OrgReadSerializer,
|
OrgSerializer, OrgReadSerializer,
|
||||||
OrgRetrieveSerializer, OrgMemberSerializer
|
OrgRetrieveSerializer, OrgMemberSerializer,
|
||||||
|
OrgMemberAdminSerializer, OrgMemberUserSerializer
|
||||||
)
|
)
|
||||||
from users.models import User, UserGroup
|
from users.models import User, UserGroup
|
||||||
from assets.models import Asset, Domain, AdminUser, SystemUser, Label
|
from assets.models import Asset, Domain, AdminUser, SystemUser, Label
|
||||||
|
@ -84,3 +84,51 @@ class OrgMemberRelationBulkViewSet(JMSBulkRelationModelViewSet):
|
||||||
objs = list(queryset.all().prefetch_related('user', 'org'))
|
objs = list(queryset.all().prefetch_related('user', 'org'))
|
||||||
queryset.delete()
|
queryset.delete()
|
||||||
self.send_m2m_changed_signal(objs, action='post_remove')
|
self.send_m2m_changed_signal(objs, action='post_remove')
|
||||||
|
|
||||||
|
|
||||||
|
class OrgMemberAdminRelationBulkViewSet(JMSBulkRelationModelViewSet):
|
||||||
|
permission_classes = (IsSuperUserOrAppUser,)
|
||||||
|
m2m_field = Organization.members.field
|
||||||
|
serializer_class = OrgMemberAdminSerializer
|
||||||
|
filterset_class = OrgMemberRelationFilterSet
|
||||||
|
search_fields = ('user__name', 'user__username', 'org__name')
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
queryset = super().get_queryset()
|
||||||
|
org_id = self.kwargs.get('org_id')
|
||||||
|
queryset = queryset.filter(org_id=org_id, role=ROLE.ADMIN)
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
def perform_bulk_create(self, serializer):
|
||||||
|
data = serializer.validated_data
|
||||||
|
relations = [OrganizationMember(**i) for i in data]
|
||||||
|
OrganizationMember.objects.bulk_create(relations, ignore_conflicts=True)
|
||||||
|
|
||||||
|
def perform_bulk_destroy(self, queryset):
|
||||||
|
objs = list(queryset.all().prefetch_related('user', 'org'))
|
||||||
|
queryset.delete()
|
||||||
|
self.send_m2m_changed_signal(objs, action='post_remove')
|
||||||
|
|
||||||
|
|
||||||
|
class OrgMemberUserRelationBulkViewSet(JMSBulkRelationModelViewSet):
|
||||||
|
permission_classes = (IsSuperUserOrAppUser,)
|
||||||
|
m2m_field = Organization.members.field
|
||||||
|
serializer_class = OrgMemberUserSerializer
|
||||||
|
filterset_class = OrgMemberRelationFilterSet
|
||||||
|
search_fields = ('user__name', 'user__username', 'org__name')
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
queryset = super().get_queryset()
|
||||||
|
org_id = self.kwargs.get('org_id')
|
||||||
|
queryset = queryset.filter(org_id=org_id, role=ROLE.USER)
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
def perform_bulk_create(self, serializer):
|
||||||
|
data = serializer.validated_data
|
||||||
|
relations = [OrganizationMember(**i) for i in data]
|
||||||
|
OrganizationMember.objects.bulk_create(relations, ignore_conflicts=True)
|
||||||
|
|
||||||
|
def perform_bulk_destroy(self, queryset):
|
||||||
|
objs = list(queryset.all().prefetch_related('user', 'org'))
|
||||||
|
queryset.delete()
|
||||||
|
self.send_m2m_changed_signal(objs, action='post_remove')
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from rest_framework.serializers import ModelSerializer
|
from rest_framework.serializers import ModelSerializer
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from users.models.user import User
|
from users.models.user import User
|
||||||
from common.serializers import AdaptedBulkListSerializer
|
from common.serializers import AdaptedBulkListSerializer
|
||||||
from common.drf.serializers import BulkModelSerializer
|
from common.drf.serializers import BulkModelSerializer
|
||||||
from common.db.models import concated_display as display
|
from common.db.models import concated_display as display
|
||||||
from .models import Organization, OrganizationMember
|
from .models import Organization, OrganizationMember, ROLE
|
||||||
|
|
||||||
|
|
||||||
class OrgSerializer(ModelSerializer):
|
class OrgSerializer(ModelSerializer):
|
||||||
|
@ -73,6 +74,28 @@ class OrgMemberSerializer(BulkModelSerializer):
|
||||||
).distinct()
|
).distinct()
|
||||||
|
|
||||||
|
|
||||||
|
class OrgMemberAdminSerializer(BulkModelSerializer):
|
||||||
|
role = serializers.HiddenField(default=ROLE.ADMIN)
|
||||||
|
organization = serializers.PrimaryKeyRelatedField(
|
||||||
|
label=_('Organization'), queryset=Organization.objects.all(), required=True, source='org'
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = OrganizationMember
|
||||||
|
fields = ('id', 'organization', 'user', 'role')
|
||||||
|
|
||||||
|
|
||||||
|
class OrgMemberUserSerializer(BulkModelSerializer):
|
||||||
|
role = serializers.HiddenField(default=ROLE.USER)
|
||||||
|
organization = serializers.PrimaryKeyRelatedField(
|
||||||
|
label=_('Organization'), queryset=Organization.objects.all(), required=True, source='org'
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = OrganizationMember
|
||||||
|
fields = ('id', 'organization', 'user', 'role')
|
||||||
|
|
||||||
|
|
||||||
class OrgRetrieveSerializer(OrgReadSerializer):
|
class OrgRetrieveSerializer(OrgReadSerializer):
|
||||||
admins = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
admins = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
auditors = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
auditors = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
|
|
|
@ -16,6 +16,11 @@ bulk_router = BulkRouter()
|
||||||
router.register(r'orgs', api.OrgViewSet, 'org')
|
router.register(r'orgs', api.OrgViewSet, 'org')
|
||||||
bulk_router.register(r'org-member-relation', api.OrgMemberRelationBulkViewSet, 'org-member-relation')
|
bulk_router.register(r'org-member-relation', api.OrgMemberRelationBulkViewSet, 'org-member-relation')
|
||||||
|
|
||||||
|
router.register(r'orgs/(?P<org_id>[0-9a-zA-Z\-]{36})/membership/admins',
|
||||||
|
api.OrgMemberAdminRelationBulkViewSet, 'membership-admins')
|
||||||
|
router.register(r'orgs/(?P<org_id>[0-9a-zA-Z\-]{36})/membership/users',
|
||||||
|
api.OrgMemberUserRelationBulkViewSet, 'membership-users'),
|
||||||
|
|
||||||
old_version_urlpatterns = [
|
old_version_urlpatterns = [
|
||||||
re_path('(?P<resource>org)/.*', capi.redirect_plural_name_api)
|
re_path('(?P<resource>org)/.*', capi.redirect_plural_name_api)
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue