[Update] 优化用户授权的 RemoteApp API 过滤逻辑

pull/3267/head
BaiJiangJie 2019-09-24 16:36:46 +08:00
parent 3f9e2f0af7
commit e805e9cede
2 changed files with 6 additions and 42 deletions

View File

@ -14,7 +14,6 @@ from ..utils import (
parse_remote_app_to_tree_node, parse_remote_app_to_tree_node,
) )
from ..hands import User, RemoteApp, RemoteAppSerializer, UserGroup, SystemUser from ..hands import User, RemoteApp, RemoteAppSerializer, UserGroup, SystemUser
from ..mixins import RemoteAppFilterMixin
from .mixin import UserPermissionMixin from .mixin import UserPermissionMixin
from .. import serializers from .. import serializers
@ -26,10 +25,11 @@ __all__ = [
] ]
class UserGrantedRemoteAppsApi(RemoteAppFilterMixin, ListAPIView): class UserGrantedRemoteAppsApi(ListAPIView):
permission_classes = (IsOrgAdminOrAppUser,) permission_classes = (IsOrgAdminOrAppUser,)
serializer_class = RemoteAppSerializer serializer_class = RemoteAppSerializer
filter_fields = ['id'] filter_fields = ['name', 'id']
search_fields = ['name']
def get_object(self): def get_object(self):
user_id = self.kwargs.get('pk', '') user_id = self.kwargs.get('pk', '')
@ -54,15 +54,14 @@ class UserGrantedRemoteAppsAsTreeApi(UserGrantedRemoteAppsApi):
serializer_class = TreeNodeSerializer serializer_class = TreeNodeSerializer
permission_classes = (IsOrgAdminOrAppUser,) permission_classes = (IsOrgAdminOrAppUser,)
def get_serializer(self, *args, **kwargs): def get_serializer(self, remote_apps=None, *args, **kwargs):
only_remote_app = self.request.query_params.get('only', '0') == '1' only_remote_app = self.request.query_params.get('only', '0') == '1'
tree_root = None tree_root = None
data = [] data = []
if not only_remote_app: if not only_remote_app:
tree_root = construct_remote_apps_tree_root() tree_root = construct_remote_apps_tree_root()
data.append(tree_root) data.append(tree_root)
queryset = super().get_queryset() for remote_app in remote_apps:
for remote_app in queryset:
node = parse_remote_app_to_tree_node(tree_root, remote_app) node = parse_remote_app_to_tree_node(tree_root, remote_app)
data.append(node) data.append(node)
data.sort() data.sort()

View File

@ -4,7 +4,7 @@
from orgs.utils import set_to_root_org from orgs.utils import set_to_root_org
__all__ = [ __all__ = [
'AssetsFilterMixin', 'RemoteAppFilterMixin', 'ChangeOrgIfNeedMixin', 'AssetsFilterMixin', 'ChangeOrgIfNeedMixin',
] ]
@ -68,41 +68,6 @@ class AssetsFilterMixin(object):
return _queryset return _queryset
class RemoteAppFilterMixin(object):
"""
对RemoteApp进行过滤(查询排序)
"""
def filter_queryset(self, queryset):
queryset = self.search_remote_apps(queryset)
queryset = self.sort_remote_apps(queryset)
return queryset
def search_remote_apps(self, queryset):
value = self.request.query_params.get('search')
if not value:
return queryset
queryset = [
remote_app for remote_app in queryset if value in remote_app.name
]
return queryset
def sort_remote_apps(self, queryset):
order_by = self.request.query_params.get('order')
if not order_by:
order_by = 'name'
if order_by.startswith('-'):
order_by = order_by.lstrip('-')
reverse = True
else:
reverse = False
queryset = sorted(
queryset, key=lambda x: getattr(x, order_by), reverse=reverse
)
return queryset
class ChangeOrgIfNeedMixin(object): class ChangeOrgIfNeedMixin(object):
@staticmethod @staticmethod