mirror of https://github.com/jumpserver/jumpserver
perf: 修改 account 序列号字段
parent
327eb7a27d
commit
17627390f8
|
@ -1,20 +1,23 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.generics import CreateAPIView, ListAPIView
|
||||
from rest_framework.response import Response
|
||||
|
||||
from orgs.mixins.api import OrgBulkModelViewSet
|
||||
|
||||
from common.mixins import RecordViewLogMixin
|
||||
from assets.models import Account, Asset
|
||||
from assets.filters import AccountFilterSet
|
||||
from assets.tasks import verify_accounts_connectivity
|
||||
from assets import serializers
|
||||
from assets.filters import AccountFilterSet
|
||||
from assets.models import Account, Asset
|
||||
from assets.tasks import verify_accounts_connectivity
|
||||
from authentication.const import ConfirmType
|
||||
from common.mixins import RecordViewLogMixin
|
||||
from common.permissions import UserConfirmation
|
||||
from orgs.mixins.api import OrgBulkModelViewSet
|
||||
|
||||
__all__ = [
|
||||
'AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI', 'AccountHistoriesSecretAPI'
|
||||
]
|
||||
|
||||
from rbac.permissions import RBACPermission
|
||||
|
||||
|
||||
class AccountViewSet(OrgBulkModelViewSet):
|
||||
model = Account
|
||||
|
@ -62,8 +65,7 @@ class AccountSecretsViewSet(RecordViewLogMixin, AccountViewSet):
|
|||
'default': serializers.AccountSecretSerializer,
|
||||
}
|
||||
http_method_names = ['get', 'options']
|
||||
# Todo: 记得打开
|
||||
# permission_classes = [RBACPermission, UserConfirmation.require(ConfirmType.MFA)]
|
||||
permission_classes = [RBACPermission, UserConfirmation.require(ConfirmType.MFA)]
|
||||
rbac_perms = {
|
||||
'list': 'assets.view_accountsecret',
|
||||
'retrieve': 'assets.view_accountsecret',
|
||||
|
@ -110,4 +112,5 @@ class AccountTaskCreateAPI(CreateAPIView):
|
|||
def get_exception_handler(self):
|
||||
def handler(e, context):
|
||||
return Response({"error": str(e)}, status=400)
|
||||
|
||||
return handler
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
from rest_framework import serializers
|
||||
|
||||
from common.drf.serializers import SecretReadableMixin
|
||||
from common.drf.fields import ObjectRelatedField, LabeledChoiceField
|
||||
from assets.tasks import push_accounts_to_assets
|
||||
from assets.models import Account, AccountTemplate, Asset
|
||||
from .base import BaseAccountSerializer
|
||||
from assets.const import SecretType
|
||||
from assets.models import Account, AccountTemplate, Asset
|
||||
from assets.tasks import push_accounts_to_assets
|
||||
from common.drf.fields import ObjectRelatedField, LabeledChoiceField
|
||||
from common.drf.serializers import SecretReadableMixin, BulkModelSerializer
|
||||
from .base import BaseAccountSerializer
|
||||
|
||||
|
||||
class AccountSerializerCreateMixin(serializers.ModelSerializer):
|
||||
class AccountSerializerCreateMixin(BulkModelSerializer):
|
||||
template = serializers.UUIDField(
|
||||
required=False, allow_null=True, write_only=True,
|
||||
label=_('Account template')
|
||||
|
@ -53,11 +53,27 @@ class AccountSerializerCreateMixin(serializers.ModelSerializer):
|
|||
return instance
|
||||
|
||||
|
||||
class AccountAssetSerializer(serializers.ModelSerializer):
|
||||
platform = ObjectRelatedField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Asset
|
||||
fields = ['id', 'name', 'address', 'platform']
|
||||
|
||||
def to_internal_value(self, data):
|
||||
if isinstance(data, dict):
|
||||
i = data.get('id')
|
||||
else:
|
||||
i = data
|
||||
|
||||
try:
|
||||
return Asset.objects.get(id=i)
|
||||
except Asset.DoesNotExist:
|
||||
raise serializers.ValidationError(_('Asset not found'))
|
||||
|
||||
|
||||
class AccountSerializer(AccountSerializerCreateMixin, BaseAccountSerializer):
|
||||
asset = ObjectRelatedField(
|
||||
required=False, queryset=Asset.objects,
|
||||
label=_('Asset'), attrs=('id', 'name', 'address', 'platform_id')
|
||||
)
|
||||
asset = AccountAssetSerializer(label=_('Asset'))
|
||||
su_from = ObjectRelatedField(
|
||||
required=False, queryset=Account.objects, allow_null=True, allow_empty=True,
|
||||
label=_('Su from'), attrs=('id', 'name', 'username')
|
||||
|
@ -66,22 +82,17 @@ class AccountSerializer(AccountSerializerCreateMixin, BaseAccountSerializer):
|
|||
class Meta(BaseAccountSerializer.Meta):
|
||||
model = Account
|
||||
fields = BaseAccountSerializer.Meta.fields \
|
||||
+ ['su_from', 'version', 'asset'] \
|
||||
+ ['template', 'push_now']
|
||||
+ ['su_from', 'version', 'asset'] \
|
||||
+ ['template', 'push_now']
|
||||
extra_kwargs = {
|
||||
**BaseAccountSerializer.Meta.extra_kwargs,
|
||||
'name': {'required': False, 'allow_null': True},
|
||||
}
|
||||
|
||||
def __init__(self, *args, data=None, **kwargs):
|
||||
super().__init__(*args, data=data, **kwargs)
|
||||
if data and 'name' not in data:
|
||||
username = data.get('username')
|
||||
if username is not None:
|
||||
data['name'] = username
|
||||
if hasattr(self, 'initial_data') and \
|
||||
not getattr(self, 'initial_data', None):
|
||||
delattr(self, 'initial_data')
|
||||
def validate_name(self, value):
|
||||
if not value:
|
||||
value = self.initial_data.get('username')
|
||||
return value
|
||||
|
||||
@classmethod
|
||||
def setup_eager_loading(cls, queryset):
|
||||
|
|
|
@ -872,7 +872,7 @@ msgstr "自动化任务执行历史"
|
|||
#: assets/models/automations/change_secret.py:15 assets/models/base.py:67
|
||||
#: assets/serializers/account/account.py:97 assets/serializers/base.py:13
|
||||
msgid "Secret type"
|
||||
msgstr "密问类型"
|
||||
msgstr "密文类型"
|
||||
|
||||
#: assets/models/automations/change_secret.py:19
|
||||
#: assets/serializers/automations/change_secret.py:25
|
||||
|
|
Loading…
Reference in New Issue