fix: 用户页面授权资产列表获取系统用户慢 (#5663)

Co-authored-by: xinwen <coderWen@126.com>
This commit is contained in:
fit2bot 2021-03-02 14:48:47 +08:00 committed by GitHub
parent 6f3ead3c42
commit 51c9a89b1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,20 +6,19 @@ from common.utils import get_logger
from perms.models import AssetPermission from perms.models import AssetPermission
from perms.hands import Asset, User, UserGroup, SystemUser from perms.hands import Asset, User, UserGroup, SystemUser
from perms.models.base import BasePermissionQuerySet from perms.models.base import BasePermissionQuerySet
from perms.utils.asset.user_permission import get_user_all_asset_perm_ids
logger = get_logger(__file__) logger = get_logger(__file__)
def get_asset_system_users_id_with_actions(asset_perm_queryset: BasePermissionQuerySet, asset: Asset): def get_asset_system_users_id_with_actions(asset_perm_ids, asset: Asset):
asset_perms_id = set(asset_perm_queryset.values_list('id', flat=True))
nodes = asset.get_nodes() nodes = asset.get_nodes()
node_keys = set() node_keys = set()
for node in nodes: for node in nodes:
ancestor_keys = node.get_ancestor_keys(with_self=True) ancestor_keys = node.get_ancestor_keys(with_self=True)
node_keys.update(ancestor_keys) node_keys.update(ancestor_keys)
queryset = AssetPermission.objects.filter(id__in=asset_perms_id)\ queryset = AssetPermission.objects.filter(id__in=asset_perm_ids)\
.filter(Q(assets=asset) | Q(nodes__key__in=node_keys)) .filter(Q(assets=asset) | Q(nodes__key__in=node_keys))
asset_protocols = asset.protocols_as_dict.keys() asset_protocols = asset.protocols_as_dict.keys()
@ -36,10 +35,8 @@ def get_asset_system_users_id_with_actions(asset_perm_queryset: BasePermissionQu
def get_asset_system_users_id_with_actions_by_user(user: User, asset: Asset): def get_asset_system_users_id_with_actions_by_user(user: User, asset: Asset):
queryset = AssetPermission.objects.filter( asset_perm_ids = get_user_all_asset_perm_ids(user)
Q(users=user) | Q(user_groups__users=user) return get_asset_system_users_id_with_actions(asset_perm_ids, asset)
).valid()
return get_asset_system_users_id_with_actions(queryset, asset)
def has_asset_system_permission(user: User, asset: Asset, system_user: SystemUser): def has_asset_system_permission(user: User, asset: Asset, system_user: SystemUser):
@ -51,5 +48,7 @@ def has_asset_system_permission(user: User, asset: Asset, system_user: SystemUse
def get_asset_system_users_id_with_actions_by_group(group: UserGroup, asset: Asset): def get_asset_system_users_id_with_actions_by_group(group: UserGroup, asset: Asset):
queryset = AssetPermission.objects.filter(user_groups=group).valid() asset_perm_ids = AssetPermission.objects.filter(
return get_asset_system_users_id_with_actions(queryset, asset) user_groups=group
).valid().values_list('id', flat=True).distinct()
return get_asset_system_users_id_with_actions(asset_perm_ids, asset)