feat: 应用公共访问链接添加访问限制

This commit is contained in:
shaohuzhang1 2024-03-12 17:16:20 +08:00
parent cc2cdff2bc
commit a1e2d29cf4
4 changed files with 59 additions and 2 deletions

View File

@ -0,0 +1,29 @@
# Generated by Django 4.1.10 on 2024-03-12 17:11
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('application', '0007_alter_application_desc'),
]
operations = [
migrations.AddField(
model_name='applicationaccesstoken',
name='access_num',
field=models.IntegerField(default=100, verbose_name='访问次数'),
),
migrations.AddField(
model_name='applicationaccesstoken',
name='white_active',
field=models.BooleanField(default=False, verbose_name='是否开启白名单'),
),
migrations.AddField(
model_name='applicationaccesstoken',
name='white_list',
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), default=list, size=None, verbose_name='白名单列表'),
),
]

View File

@ -8,6 +8,7 @@
"""
import uuid
from django.contrib.postgres.fields import ArrayField
from django.db import models
from application.models import Application
@ -21,6 +22,7 @@ class ApplicationApiKey(AppModelMixin):
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"
@ -32,6 +34,11 @@ class ApplicationAccessToken(AppModelMixin):
application = models.OneToOneField(Application, primary_key=True, on_delete=models.CASCADE, verbose_name="应用id")
access_token = models.CharField(max_length=128, verbose_name="用户公开访问 认证token", unique=True)
is_active = models.BooleanField(default=True, verbose_name="是否开启公开访问")
access_num = models.IntegerField(default=100, verbose_name="访问次数")
white_active = models.BooleanField(default=False, verbose_name="是否开启白名单")
white_list = ArrayField(verbose_name="白名单列表",
base_field=models.CharField(max_length=128, blank=True)
, default=list)
class Meta:
db_table = "application_access_token"

View File

@ -111,6 +111,12 @@ class ApplicationSerializer(serializers.Serializer):
access_token_reset = serializers.BooleanField(required=False,
error_messages=ErrMessage.boolean("重置Token"))
is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启"))
access_num = serializers.IntegerField(required=False, error_messages=ErrMessage.integer("访问次数"))
white_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启白名单"))
white_list = serializers.ListSerializer(required=False, child=serializers.CharField(required=True,
error_messages=ErrMessage.char(
"白名单")),
error_messages=ErrMessage.list("白名单列表"))
def edit(self, instance: Dict, with_valid=True):
if with_valid:
@ -124,6 +130,12 @@ class ApplicationSerializer(serializers.Serializer):
application_access_token.is_active = instance.get("is_active")
if 'access_token_reset' in instance and instance.get('access_token_reset'):
application_access_token.access_token = hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24]
if 'access_num' in instance and instance.get('access_num') is not None:
application_access_token.access_num = instance.get("access_num")
if 'white_active' in instance and instance.get('white_active') is not None:
application_access_token.white_active = instance.get("white_active")
if 'white_list' in instance and instance.get('white_list') is not None:
application_access_token.white_list = instance.get('white_list')
application_access_token.save()
return self.one(with_valid=False)
@ -141,7 +153,11 @@ class ApplicationSerializer(serializers.Serializer):
application_access_token.save()
return {'application_id': application_access_token.application_id,
'access_token': application_access_token.access_token,
"is_active": application_access_token.is_active}
"is_active": application_access_token.is_active,
'access_num': application_access_token.access_num,
'white_active': application_access_token.white_active,
'white_list': application_access_token.white_list
}
class Authentication(serializers.Serializer):
access_token = serializers.CharField(required=True, error_messages=ErrMessage.char("access_token"))

View File

@ -125,7 +125,12 @@ class ApplicationApi(ApiMixin):
description="重置Token"),
'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活", description="是否激活"),
'access_num': openapi.Schema(type=openapi.TYPE_NUMBER, title="访问次数", description="访问次数"),
'white_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否开启白名单",
description="是否开启白名单"),
'white_list': openapi.Schema(type=openapi.TYPE_ARRAY,
items=openapi.Schema(type=openapi.TYPE_STRING), title="白名单列表",
description="白名单列表"),
}
)