Merge pull request #3267 from jumpserver/dev_ra

[Update] 优化用户授权 RemoteApp API 逻辑
pull/3270/head
BaiJiangJie 2019-09-24 16:38:36 +08:00 committed by GitHub
commit 02087e00fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 43 deletions

View File

@ -49,7 +49,7 @@ function initTable() {
$(td).html(hostname); $(td).html(hostname);
}}, }},
{targets: 5, createdCell: function (td, cellData, rowData) { {targets: 5, createdCell: function (td, cellData, rowData) {
var conn_btn = '<a href="{% url "luna-view" %}?login_to=' + cellData +'" class="btn btn-xs btn-primary">{% trans "Connect" %}</a>'.replace("{{ DEFAULT_PK }}", cellData); var conn_btn = '<a href="{% url "luna-view" %}?type=remote_app&login_to=' + cellData +'" class="btn btn-xs btn-primary">{% trans "Connect" %}</a>'.replace("{{ DEFAULT_PK }}", cellData);
$(td).html(conn_btn) $(td).html(conn_btn)
}} }}
], ],

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