feat: 应用 Api-key 开关

This commit is contained in:
shaohuzhang1 2023-12-06 14:43:52 +08:00
parent 82ffcc6c94
commit 5db9ce45c3
5 changed files with 37 additions and 2 deletions

View File

@ -0,0 +1,28 @@
# Generated by Django 4.1.10 on 2023-12-06 06:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('application', '0006_applicationaccesstoken_applicationapikey'),
]
operations = [
migrations.AddField(
model_name='application',
name='api_key_is_active',
field=models.BooleanField(default=True, verbose_name='api_key是否可用'),
),
migrations.AlterField(
model_name='application',
name='desc',
field=models.CharField(default='', max_length=128, verbose_name='引用描述'),
),
migrations.AlterField(
model_name='application',
name='prologue',
field=models.CharField(default='', max_length=1024, verbose_name='开场白'),
),
]

View File

@ -28,6 +28,7 @@ class Application(AppModelMixin):
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"

View File

@ -134,6 +134,7 @@ class ApplicationSerializer(serializers.Serializer):
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)
@ -286,7 +287,8 @@ class ApplicationSerializer(serializers.Serializer):
model = QuerySet(Model).get(id=instance.get('model_id') if 'model_id' in instance else application.model_id)
update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'example', 'status']
update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'example', 'status',
'api_key_is_active']
for update_key in update_keys:
if update_key in instance and instance.get(update_key) is not None:
if update_key == 'multiple_rounds_dialogue':

View File

@ -134,7 +134,9 @@ 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="状态")
'status': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='状态', description="状态"),
'api_key_is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='api_key是否可用',
default=True)
}
)

View File

@ -41,6 +41,8 @@ class TokenAuth(TokenAuthentication):
application_api_key = QuerySet(ApplicationApiKey).filter(secret_key=auth).first()
if application_api_key is None:
raise AppAuthenticationFailed(500, "secret_key 无效")
if not application_api_key.application.api_key_is_active:
raise AppAuthenticationFailed(500, "secret_key 无效")
permission_list = [Permission(group=Group.APPLICATION,
operate=Operate.USE,
dynamic_tag=str(