[Update] 修改用户serializer

pull/3960/head
ibuler 2020-04-30 16:58:08 +08:00
parent b92137afd9
commit 6bb13a26f5
5 changed files with 20 additions and 5 deletions

View File

@ -1,5 +1,6 @@
# ~*~ coding: utf-8 ~*~
#
import time
from treelib import Tree
from treelib.exceptions import NodeIDAbsentError
from collections import defaultdict
@ -77,8 +78,15 @@ class TreeService(Tree):
return ancestor_ids
def ancestors(self, nid, with_self=False, deep=False, with_assets=True):
# now = time.time()
# print("Start get ancestor_ids")
ancestor_ids = self.ancestors_ids(nid, with_self=with_self)
# now2 = time.time()
# interval = (now2 - now) * 1000
# print("Start get ancestor_ids using: {}".format(interval))
ancestors = [self.get_node(i, deep=deep) for i in ancestor_ids]
# interval = (time.time() - now2) * 1000
# print("Get ancestors done: {}".format(interval))
if with_assets:
return ancestors
for n in ancestors:

View File

@ -2,6 +2,7 @@
#
from common.utils import lazyproperty
from common.tree import TreeNodeSerializer
from django.db.models import QuerySet
from ..mixin import UserPermissionMixin
from ...utils import AssetPermissionUtil, ParserNode
from ...hands import Node, Asset
@ -32,7 +33,8 @@ class UserNodeTreeMixin:
nodes_only_fields = ParserNode.nodes_only_fields
def parse_nodes_to_queryset(self, nodes):
nodes = nodes.only(*self.nodes_only_fields)
if isinstance(nodes, QuerySet):
nodes = nodes.only(*self.nodes_only_fields)
_queryset = []
for node in nodes:

View File

@ -290,11 +290,12 @@ class AssetPermissionUtil(AssetPermissionUtilCacheMixin):
def parse_user_tree_to_full_tree(self, user_tree):
"""
经过前面两个动作用户授权的节点已放到树上但是树不是完整的
这里要树构造成一个完整的树
这里要树构造成一个完整的树
"""
# 开始修正user_tree保证父节点都在树上
root_children = user_tree.children('')
for child in root_children:
# print("child: {}".format(child.identifier))
if child.identifier.isdigit():
continue
if child.identifier.startswith('-'):
@ -303,6 +304,7 @@ class AssetPermissionUtil(AssetPermissionUtilCacheMixin):
child.identifier, with_self=False, deep=True,
with_assets=False,
)
# print("Get ancestors: {}".format(len(ancestors)))
if not ancestors:
continue
user_tree.safe_add_ancestors(child, ancestors)

View File

@ -40,8 +40,9 @@ class UserGroupSerializer(BulkOrgResourceModelSerializer):
self.set_fields_queryset()
def set_fields_queryset(self):
users_field = self.fields['users']
users_field.child_relation.queryset = utils.get_current_org_members(exclude=('Auditor',))
users_field = self.fields.get('users')
if users_field:
users_field.child_relation.queryset = utils.get_current_org_members(exclude=('Auditor',))
def validate_users(self, users):
for user in users:

View File

@ -33,6 +33,7 @@ class UserSerializer(CommonSerializerMixin, serializers.ModelSerializer):
choices=PASSWORD_STRATEGY_CHOICES, required=False, initial=0,
label=_('Password strategy'), write_only=True
)
mfa_level_display = serializers.ReadOnlyField(source='get_mfa_level_display')
can_update = serializers.SerializerMethodField()
can_delete = serializers.SerializerMethodField()
@ -44,10 +45,11 @@ class UserSerializer(CommonSerializerMixin, serializers.ModelSerializer):
# small 指的是 不需要计算的直接能从一张表中获取到的数据
fields_small = fields_mini + [
'password', 'email', 'public_key', 'wechat', 'phone', 'mfa_level',
'mfa_level_display',
'comment', 'source', 'is_valid', 'is_expired',
'is_active', 'created_by', 'is_first_login',
'password_strategy', 'date_password_last_updated', 'date_expired',
'avatar_url', 'source_display',
'avatar_url', 'source_display', 'date_joined', 'last_login'
]
fields = fields_small + [
'groups', 'role', 'groups_display', 'role_display',