mirror of https://github.com/jumpserver/jumpserver
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
# coding: utf-8
|
|
#
|
|
|
|
from orgs.mixins.api import OrgBulkModelViewSet
|
|
from rest_framework import generics
|
|
|
|
from ..hands import IsOrgAdminOrAppUser, IsOrgAdmin
|
|
from .. import models, serializers
|
|
from ..models import Application
|
|
from assets.models import SystemUser
|
|
from assets.serializers import SystemUserListSerializer
|
|
from perms.models import ApplicationPermission
|
|
from ..const import ApplicationCategoryChoices
|
|
|
|
|
|
__all__ = ['ApplicationViewSet', 'ApplicationUserListApi']
|
|
|
|
|
|
class ApplicationViewSet(OrgBulkModelViewSet):
|
|
model = Application
|
|
filterset_fields = ('name', 'type', 'category')
|
|
search_fields = filterset_fields
|
|
permission_classes = (IsOrgAdminOrAppUser,)
|
|
serializer_class = serializers.ApplicationSerializer
|
|
|
|
|
|
class ApplicationUserListApi(generics.ListAPIView):
|
|
permission_classes = (IsOrgAdmin, )
|
|
filterset_fields = ('name', 'username')
|
|
search_fields = filterset_fields
|
|
serializer_class = SystemUserListSerializer
|
|
|
|
def get_application(self):
|
|
application = None
|
|
app_id = self.request.query_params.get('application_id')
|
|
if app_id:
|
|
application = Application.objects.get(id=app_id)
|
|
return application
|
|
|
|
def get_queryset(self):
|
|
queryset = SystemUser.objects.none()
|
|
application = self.get_application()
|
|
if not application:
|
|
return queryset
|
|
system_user_ids = ApplicationPermission.objects.filter(applications=application)\
|
|
.values_list('system_users', flat=True)
|
|
if not system_user_ids:
|
|
return queryset
|
|
queryset = SystemUser.objects.filter(id__in=system_user_ids)
|
|
return queryset
|