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)
|
secret_key = models.CharField(max_length=1024, verbose_name="秘钥", unique=True)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id")
|
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id")
|
||||||
application = models.ForeignKey(Application, 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:
|
class Meta:
|
||||||
db_table = "application_api_key"
|
db_table = "application_api_key"
|
||||||
|
|
||||||
|
|||||||
@ -25,10 +25,8 @@ class Application(AppModelMixin):
|
|||||||
prologue = models.CharField(max_length=1024, verbose_name="开场白", default="")
|
prologue = models.CharField(max_length=1024, verbose_name="开场白", default="")
|
||||||
example = ArrayField(verbose_name="示例列表", base_field=models.CharField(max_length=256, blank=True))
|
example = ArrayField(verbose_name="示例列表", base_field=models.CharField(max_length=256, blank=True))
|
||||||
dialogue_number = models.IntegerField(default=0, verbose_name="会话数量")
|
dialogue_number = models.IntegerField(default=0, verbose_name="会话数量")
|
||||||
status = models.BooleanField(default=True, verbose_name="是否发布")
|
|
||||||
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||||
model = models.ForeignKey(Model, on_delete=models.DO_NOTHING, db_constraint=False)
|
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:
|
class Meta:
|
||||||
db_table = "application"
|
db_table = "application"
|
||||||
|
|||||||
@ -133,8 +133,6 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
prologue = serializers.CharField(required=False)
|
prologue = serializers.CharField(required=False)
|
||||||
example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True))
|
example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True))
|
||||||
dataset_id_list = serializers.ListSerializer(required=False, child=serializers.UUIDField(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):
|
def is_valid(self, *, user_id=None, raise_exception=False):
|
||||||
super().is_valid(raise_exception=True)
|
super().is_valid(raise_exception=True)
|
||||||
@ -355,6 +353,9 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
application_api_key in
|
application_api_key in
|
||||||
QuerySet(ApplicationApiKey).filter(user_id=user_id, application_id=application_id)]
|
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):
|
class Operate(serializers.Serializer):
|
||||||
application_id = serializers.UUIDField(required=True)
|
application_id = serializers.UUIDField(required=True)
|
||||||
|
|
||||||
@ -367,3 +368,19 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
application_id = self.data.get('application_id')
|
application_id = self.data.get('application_id')
|
||||||
QuerySet(ApplicationApiKey).filter(id=api_key_id,
|
QuerySet(ApplicationApiKey).filter(id=api_key_id,
|
||||||
application_id=application_id).delete()
|
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')
|
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):
|
class AccessToken(ApiMixin):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_request_params_api():
|
def get_request_params_api():
|
||||||
@ -134,9 +146,6 @@ class ApplicationApi(ApiMixin):
|
|||||||
'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY,
|
'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY,
|
||||||
items=openapi.Schema(type=openapi.TYPE_STRING),
|
items=openapi.Schema(type=openapi.TYPE_STRING),
|
||||||
title="关联数据集Id列表", description="关联数据集Id列表"),
|
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):
|
class Operate(APIView):
|
||||||
authentication_classes = [TokenAuth]
|
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)
|
@action(methods=['DELETE'], detail=False)
|
||||||
@swagger_auto_schema(operation_summary="删除应用API_KEY",
|
@swagger_auto_schema(operation_summary="删除应用API_KEY",
|
||||||
operation_id="删除应用API_KEY",
|
operation_id="删除应用API_KEY",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user