diff --git a/apps/perms/api/asset_permission_relation.py b/apps/perms/api/asset_permission_relation.py index d63b326b2..c2c116248 100644 --- a/apps/perms/api/asset_permission_relation.py +++ b/apps/perms/api/asset_permission_relation.py @@ -10,11 +10,13 @@ from orgs.utils import current_org from perms import serializers from perms import models from perms.utils.user_permission import UserGrantedAssetsQueryUtils +from assets.serializers import AccountSerializer __all__ = [ 'AssetPermissionUserRelationViewSet', 'AssetPermissionUserGroupRelationViewSet', 'AssetPermissionAssetRelationViewSet', 'AssetPermissionNodeRelationViewSet', 'AssetPermissionAllAssetListApi', 'AssetPermissionAllUserListApi', + 'AssetPermissionAccountListApi', ] @@ -111,3 +113,16 @@ class AssetPermissionNodeRelationViewSet(RelationMixin): queryset = queryset.annotate(node_key=F('node__key')) return queryset + +class AssetPermissionAccountListApi(generics.ListAPIView): + serializer_class = AccountSerializer + filterset_fields = ("name", "username", "privileged", "version") + search_fields = filterset_fields + + def get_queryset(self): + pk = self.kwargs.get("pk") + perm = get_object_or_404(models.AssetPermission, pk=pk) + accounts = perm.get_all_accounts() + return accounts + + diff --git a/apps/perms/models/asset_permission.py b/apps/perms/models/asset_permission.py index cc071065d..6e2b6e637 100644 --- a/apps/perms/models/asset_permission.py +++ b/apps/perms/models/asset_permission.py @@ -136,7 +136,7 @@ class AssetPermission(OrgModelMixin): q = Q(asset_id__in=asset_ids) if not self.is_perm_all_accounts: q &= Q(username__in=self.accounts) - accounts = Account.objects.filter(q) + accounts = Account.objects.filter(q).order_by('asset__name', 'name', 'username') if not flat: return accounts return accounts.values_list('id', flat=True) diff --git a/apps/perms/serializers/permission_relation.py b/apps/perms/serializers/permission_relation.py index 4c76ae3fa..3e469106a 100644 --- a/apps/perms/serializers/permission_relation.py +++ b/apps/perms/serializers/permission_relation.py @@ -3,9 +3,7 @@ from rest_framework import serializers from common.drf.serializers import BulkSerializerMixin -from assets.models import Asset, Node from perms.models import AssetPermission -from users.models import User __all__ = [ 'AssetPermissionUserRelationSerializer', diff --git a/apps/perms/urls/asset_permission.py b/apps/perms/urls/asset_permission.py index a97727550..095a67dba 100644 --- a/apps/perms/urls/asset_permission.py +++ b/apps/perms/urls/asset_permission.py @@ -84,6 +84,7 @@ permission_urlpatterns = [ # 授权规则中授权的资产 path('/assets/all/', api.AssetPermissionAllAssetListApi.as_view(), name='asset-permission-all-assets'), path('/users/all/', api.AssetPermissionAllUserListApi.as_view(), name='asset-permission-all-users'), + path('/accounts/', api.AssetPermissionAccountListApi.as_view(), name='asset-permission-accounts'), ] asset_permission_urlpatterns = [