diff --git a/apps/application/models/application_api_key.py b/apps/application/models/application_api_key.py
index a605bb00183..06c9e4b522a 100644
--- a/apps/application/models/application_api_key.py
+++ b/apps/application/models/application_api_key.py
@@ -20,6 +20,8 @@ class ApplicationApiKey(AppModelMixin):
, default=list)
expire_time = models.DateTimeField(verbose_name="过期时间", default=timezone.now)
is_permanent = models.BooleanField(default=True, verbose_name="是否永久")
+ user = models.ForeignKey("users.User", on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True,
+ verbose_name="创建用户")
class Meta:
db_table = "application_api_key"
diff --git a/apps/application/serializers/application_api_key.py b/apps/application/serializers/application_api_key.py
index 88b4a5591ad..b0818e6f0a0 100644
--- a/apps/application/serializers/application_api_key.py
+++ b/apps/application/serializers/application_api_key.py
@@ -1,6 +1,7 @@
import hashlib
import uuid_utils.compat as uuid
+from django.core.exceptions import ObjectDoesNotExist
from django.db.models import QuerySet
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
@@ -14,10 +15,26 @@
class ApplicationKeySerializerModel(serializers.ModelSerializer):
+ user = serializers.SerializerMethodField()
+
class Meta:
model = ApplicationApiKey
fields = "__all__"
+ @staticmethod
+ def get_user(obj):
+ if not obj.user_id:
+ return None
+ try:
+ user = obj.user
+ except ObjectDoesNotExist:
+ return None
+ return {
+ "id": obj.user_id,
+ "username": user.username,
+ "nick_name": user.nick_name,
+ }
+
class EditApplicationKeySerializer(serializers.Serializer):
is_active = serializers.BooleanField(required=False, label=_("Availability"))
@@ -36,6 +53,7 @@ class EditApplicationKeySerializer(serializers.Serializer):
class ApplicationKeySerializer(serializers.Serializer):
workspace_id = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Workspace ID"))
application_id = serializers.UUIDField(required=True, label=_('application id'))
+ user_id = serializers.UUIDField(required=False, allow_null=True, label=_('user id'))
order_by = serializers.CharField(required=False, label=_('order by'), allow_null=True, allow_blank=True)
def is_valid(self, *, raise_exception=False):
@@ -51,10 +69,12 @@ def generate(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
application_id = self.data.get("application_id")
+ user_id = self.data.get("user_id")
secret_key = 'agent-' + hashlib.md5(str(uuid.uuid7()).encode()).hexdigest()
application_api_key = ApplicationApiKey(id=uuid.uuid7(),
secret_key=secret_key,
- application_id=application_id)
+ application_id=application_id,
+ user_id=user_id)
application_api_key.save()
return ApplicationKeySerializerModel(application_api_key).data
@@ -62,7 +82,7 @@ def page(self, current_page: int, page_size: int, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
application_id = self.data.get("application_id")
- query_set = QuerySet(ApplicationApiKey).filter(application_id=application_id)
+ query_set = QuerySet(ApplicationApiKey).filter(application_id=application_id).select_related('user')
order_by = '-create_time' if self.data.get('order_by') is None or self.data.get(
'order_by') == '' else self.data.get('order_by')
query_set = query_set.order_by(order_by)
diff --git a/apps/application/views/application_api_key.py b/apps/application/views/application_api_key.py
index 213c8fe7221..63a1fa98bf8 100644
--- a/apps/application/views/application_api_key.py
+++ b/apps/application/views/application_api_key.py
@@ -49,7 +49,8 @@ class ApplicationKey(APIView):
def post(self, request: Request, workspace_id: str, application_id: str):
return result.success(ApplicationKeySerializer(
data={'application_id': application_id,
- 'workspace_id': workspace_id}).generate())
+ 'workspace_id': workspace_id,
+ 'user_id': request.user.id}).generate())
class Page(APIView):
authentication_classes = [TokenAuth]
diff --git a/ui/src/views/application-overview/component/APIKeyDialog.vue b/ui/src/views/application-overview/component/APIKeyDialog.vue
index 0c7ceb0cf5a..585fb07dfdc 100644
--- a/ui/src/views/application-overview/component/APIKeyDialog.vue
+++ b/ui/src/views/application-overview/component/APIKeyDialog.vue
@@ -81,6 +81,11 @@
+
+
+ {{ row.user?.nick_name || row.user?.username || '-' }}
+
+
{{ datetimeFormat(row.create_time) }}