fix: 修复连接方式选择

pull/10675/head
ibuler 2023-06-09 17:16:23 +08:00 committed by Jiangjie.Bai
parent 00d3caf80c
commit 9574d03c12
2 changed files with 15 additions and 15 deletions

View File

@ -17,28 +17,15 @@ class ConnectMethodListApi(generics.ListAPIView):
serializer_class = serializers.ConnectMethodSerializer
permission_classes = [IsValidUser]
def filter_user_connect_methods(self, d):
from acls.models import ConnectMethodACL
# 这里要根据用户来了,受 acl 影响
acls = ConnectMethodACL.get_user_acls(self.request.user)
disabled_connect_methods = acls.values_list('connect_methods', flat=True)
disabled_connect_methods = set(itertools.chain.from_iterable(disabled_connect_methods))
new_queryset = {}
for protocol, methods in d.items():
new_queryset[protocol] = [x for x in methods if x['value'] not in disabled_connect_methods]
return new_queryset
def get_queryset(self):
os = self.request.query_params.get('os') or get_request_os(self.request)
queryset = ConnectMethodUtil.get_filtered_protocols_connect_methods(os)
flat = self.request.query_params.get('flat')
# 先这么处理, 这里不用过滤包含的事所有
if is_true(flat):
queryset = ConnectMethodUtil.get_filtered_protocols_connect_methods(os)
queryset = itertools.chain.from_iterable(queryset.values())
queryset = distinct(queryset, key=lambda x: x['value'])
else:
queryset = self.filter_queryset(queryset)
queryset = ConnectMethodUtil.get_user_allowed_connect_methods(os, self.request.user)
return queryset
def list(self, request, *args, **kwargs):

View File

@ -227,6 +227,19 @@ class ConnectMethodUtil:
methods = cls._filter_disable_protocols_connect_methods(methods)
return methods
@classmethod
def get_user_allowed_connect_methods(cls, os, user):
from acls.models import ConnectMethodACL
methods = cls.get_filtered_protocols_connect_methods(os)
acls = ConnectMethodACL.get_user_acls(user)
disabled_connect_methods = acls.values_list('connect_methods', flat=True)
disabled_connect_methods = set(itertools.chain.from_iterable(disabled_connect_methods))
new_queryset = {}
for protocol, methods in methods.items():
new_queryset[protocol] = [x for x in methods if x['value'] not in disabled_connect_methods]
return new_queryset
@classmethod
def _filter_disable_components_connect_methods(cls, methods):
component_setting = {