mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
feat: 应用 ApiKey 开关
This commit is contained in:
parent
18dc8a0cfb
commit
44a88f647b
|
|
@ -0,0 +1,26 @@
|
|||
# Generated by Django 4.1.10 on 2023-12-08 05:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('application', '0007_application_api_key_is_active_alter_application_desc_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='application',
|
||||
name='api_key_is_active',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='application',
|
||||
name='status',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='applicationapikey',
|
||||
name='is_active',
|
||||
field=models.BooleanField(default=True, verbose_name='是否开启'),
|
||||
),
|
||||
]
|
||||
|
|
@ -20,7 +20,7 @@ class ApplicationApiKey(AppModelMixin):
|
|||
secret_key = models.CharField(max_length=1024, verbose_name="秘钥", unique=True)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id")
|
||||
application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id")
|
||||
|
||||
is_active = models.BooleanField(default=True, verbose_name="是否开启")
|
||||
class Meta:
|
||||
db_table = "application_api_key"
|
||||
|
||||
|
|
|
|||
|
|
@ -25,10 +25,8 @@ class Application(AppModelMixin):
|
|||
prologue = models.CharField(max_length=1024, verbose_name="开场白", default="")
|
||||
example = ArrayField(verbose_name="示例列表", base_field=models.CharField(max_length=256, blank=True))
|
||||
dialogue_number = models.IntegerField(default=0, verbose_name="会话数量")
|
||||
status = models.BooleanField(default=True, verbose_name="是否发布")
|
||||
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
model = models.ForeignKey(Model, on_delete=models.DO_NOTHING, db_constraint=False)
|
||||
api_key_is_active = models.BooleanField(verbose_name="api_key是否可用", default=True)
|
||||
|
||||
class Meta:
|
||||
db_table = "application"
|
||||
|
|
|
|||
|
|
@ -133,8 +133,6 @@ class ApplicationSerializer(serializers.Serializer):
|
|||
prologue = serializers.CharField(required=False)
|
||||
example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True))
|
||||
dataset_id_list = serializers.ListSerializer(required=False, child=serializers.UUIDField(required=True))
|
||||
status = serializers.BooleanField(required=False)
|
||||
api_key_is_active = serializers.BooleanField(required=False)
|
||||
|
||||
def is_valid(self, *, user_id=None, raise_exception=False):
|
||||
super().is_valid(raise_exception=True)
|
||||
|
|
@ -355,6 +353,9 @@ class ApplicationSerializer(serializers.Serializer):
|
|||
application_api_key in
|
||||
QuerySet(ApplicationApiKey).filter(user_id=user_id, application_id=application_id)]
|
||||
|
||||
class Edit(serializers.Serializer):
|
||||
is_active = serializers.BooleanField(required=False)
|
||||
|
||||
class Operate(serializers.Serializer):
|
||||
application_id = serializers.UUIDField(required=True)
|
||||
|
||||
|
|
@ -367,3 +368,19 @@ class ApplicationSerializer(serializers.Serializer):
|
|||
application_id = self.data.get('application_id')
|
||||
QuerySet(ApplicationApiKey).filter(id=api_key_id,
|
||||
application_id=application_id).delete()
|
||||
|
||||
def edit(self, instance, with_valid=True):
|
||||
if with_valid:
|
||||
self.is_valid(raise_exception=True)
|
||||
ApplicationSerializer.Edit(data=instance).is_valid(raise_exception=True)
|
||||
|
||||
if 'is_active' in instance and instance.get('is_active') is not None:
|
||||
api_key_id = self.data.get("api_key_id")
|
||||
application_id = self.data.get('application_id')
|
||||
application_api_key = QuerySet(ApplicationApiKey).filter(id=api_key_id,
|
||||
application_id=application_id).first()
|
||||
if application_api_key is None:
|
||||
raise AppApiException(500, '不存在')
|
||||
|
||||
application_api_key.is_active = instance.get('is_active')
|
||||
application_api_key.save()
|
||||
|
|
|
|||
|
|
@ -91,6 +91,18 @@ class ApplicationApi(ApiMixin):
|
|||
description='应用api_key id')
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def get_request_body_api():
|
||||
return openapi.Schema(
|
||||
type=openapi.TYPE_OBJECT,
|
||||
required=[],
|
||||
properties={
|
||||
'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活",
|
||||
description="是否激活"),
|
||||
|
||||
}
|
||||
)
|
||||
|
||||
class AccessToken(ApiMixin):
|
||||
@staticmethod
|
||||
def get_request_params_api():
|
||||
|
|
@ -134,9 +146,6 @@ class ApplicationApi(ApiMixin):
|
|||
'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY,
|
||||
items=openapi.Schema(type=openapi.TYPE_STRING),
|
||||
title="关联数据集Id列表", description="关联数据集Id列表"),
|
||||
'status': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='状态', description="状态"),
|
||||
'api_key_is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='api_key是否可用',
|
||||
default=True)
|
||||
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -77,6 +77,25 @@ class Application(APIView):
|
|||
class Operate(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
@action(methods=['PUT'], detail=False)
|
||||
@swagger_auto_schema(operation_summary="修改应用API_KEY",
|
||||
operation_id="修改应用API_KEY",
|
||||
tags=['应用/API_KEY'],
|
||||
manual_parameters=ApplicationApi.ApiKey.Operate.get_request_params_api(),
|
||||
request_body=ApplicationApi.ApiKey.Operate.get_request_body_api())
|
||||
@has_permissions(ViewPermission(
|
||||
[RoleConstants.ADMIN, RoleConstants.USER],
|
||||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND), lambda r, k: Permission(group=Group.APPLICATION, operate=Operate.DELETE,
|
||||
dynamic_tag=k.get('application_id')),
|
||||
compare=CompareConstants.AND)
|
||||
def put(self, request: Request, application_id: str, api_key_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.ApplicationKeySerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id,
|
||||
'api_key_id': api_key_id}).edit(request.data))
|
||||
|
||||
@action(methods=['DELETE'], detail=False)
|
||||
@swagger_auto_schema(operation_summary="删除应用API_KEY",
|
||||
operation_id="删除应用API_KEY",
|
||||
|
|
|
|||
Loading…
Reference in New Issue