feat: 应用公共访问链接添加访问限制
This commit is contained in:
parent
cc2cdff2bc
commit
a1e2d29cf4
@ -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='白名单列表'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -8,6 +8,7 @@
|
|||||||
"""
|
"""
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
from django.contrib.postgres.fields import ArrayField
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from application.models import Application
|
from application.models import Application
|
||||||
@ -21,6 +22,7 @@ class ApplicationApiKey(AppModelMixin):
|
|||||||
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="是否开启")
|
is_active = models.BooleanField(default=True, verbose_name="是否开启")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = "application_api_key"
|
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")
|
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)
|
access_token = models.CharField(max_length=128, verbose_name="用户公开访问 认证token", unique=True)
|
||||||
is_active = models.BooleanField(default=True, verbose_name="是否开启公开访问")
|
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:
|
class Meta:
|
||||||
db_table = "application_access_token"
|
db_table = "application_access_token"
|
||||||
|
|||||||
@ -111,6 +111,12 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
access_token_reset = serializers.BooleanField(required=False,
|
access_token_reset = serializers.BooleanField(required=False,
|
||||||
error_messages=ErrMessage.boolean("重置Token"))
|
error_messages=ErrMessage.boolean("重置Token"))
|
||||||
is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启"))
|
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):
|
def edit(self, instance: Dict, with_valid=True):
|
||||||
if with_valid:
|
if with_valid:
|
||||||
@ -124,6 +130,12 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
application_access_token.is_active = instance.get("is_active")
|
application_access_token.is_active = instance.get("is_active")
|
||||||
if 'access_token_reset' in instance and instance.get('access_token_reset'):
|
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]
|
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()
|
application_access_token.save()
|
||||||
return self.one(with_valid=False)
|
return self.one(with_valid=False)
|
||||||
|
|
||||||
@ -141,7 +153,11 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
application_access_token.save()
|
application_access_token.save()
|
||||||
return {'application_id': application_access_token.application_id,
|
return {'application_id': application_access_token.application_id,
|
||||||
'access_token': application_access_token.access_token,
|
'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):
|
class Authentication(serializers.Serializer):
|
||||||
access_token = serializers.CharField(required=True, error_messages=ErrMessage.char("access_token"))
|
access_token = serializers.CharField(required=True, error_messages=ErrMessage.char("access_token"))
|
||||||
|
|||||||
@ -125,7 +125,12 @@ class ApplicationApi(ApiMixin):
|
|||||||
description="重置Token"),
|
description="重置Token"),
|
||||||
|
|
||||||
'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活", description="是否激活"),
|
'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="白名单列表"),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user