77 lines
3.2 KiB
Python
77 lines
3.2 KiB
Python
|
|
# coding=utf-8
|
|||
|
|
"""
|
|||
|
|
@project: MaxKB
|
|||
|
|
@Author:TanLianWang
|
|||
|
|
@file: access_control_policy.py
|
|||
|
|
@date:2026/4/1
|
|||
|
|
@desc: 接入控制策略
|
|||
|
|
"""
|
|||
|
|
import uuid_utils.compat as uuid
|
|||
|
|
|
|||
|
|
from django.db import models
|
|||
|
|
|
|||
|
|
from common.mixins.app_model_mixin import AppModelMixin
|
|||
|
|
from users.models import User
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AccessControlPolicy(AppModelMixin):
|
|||
|
|
"""
|
|||
|
|
接入控制策略
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
|
|||
|
|
name = models.CharField(max_length=128, unique=True, verbose_name="策略名称")
|
|||
|
|
description = models.TextField(blank=True, default="", verbose_name="策略描述")
|
|||
|
|
enabled = models.BooleanField(default=True, verbose_name="是否启用")
|
|||
|
|
access_time_enabled = models.BooleanField(default=False, verbose_name="是否限制访问时段")
|
|||
|
|
access_start_time = models.TimeField(null=True, blank=True, verbose_name="访问开始时间")
|
|||
|
|
access_end_time = models.TimeField(null=True, blank=True, verbose_name="访问结束时间")
|
|||
|
|
allowed_weekdays = models.JSONField(default=list, verbose_name="允许访问星期")
|
|||
|
|
allowed_device_types = models.JSONField(default=list, verbose_name="允许接入设备类型")
|
|||
|
|
allowed_regions = models.JSONField(default=list, verbose_name="允许接入区域")
|
|||
|
|
effect_start_time = models.DateTimeField(null=True, blank=True, verbose_name="生效开始时间")
|
|||
|
|
effect_end_time = models.DateTimeField(null=True, blank=True, verbose_name="生效结束时间")
|
|||
|
|
application_count = models.PositiveIntegerField(default=0, verbose_name="应用次数")
|
|||
|
|
last_applied_time = models.DateTimeField(null=True, blank=True, verbose_name="最近应用时间")
|
|||
|
|
|
|||
|
|
class Meta:
|
|||
|
|
db_table = "access_control_policy"
|
|||
|
|
ordering = ['-update_time', '-create_time']
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AccessControlPolicyApplicationRecord(AppModelMixin):
|
|||
|
|
"""
|
|||
|
|
接入控制策略应用记录
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
class TargetType(models.TextChoices):
|
|||
|
|
DEVICE = "DEVICE", "设备"
|
|||
|
|
SERVICE = "SERVICE", "服务"
|
|||
|
|
|
|||
|
|
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
|
|||
|
|
policy = models.ForeignKey(
|
|||
|
|
AccessControlPolicy,
|
|||
|
|
null=True,
|
|||
|
|
blank=True,
|
|||
|
|
on_delete=models.SET_NULL,
|
|||
|
|
related_name='application_records',
|
|||
|
|
verbose_name="策略",
|
|||
|
|
)
|
|||
|
|
policy_name = models.CharField(max_length=128, verbose_name="策略名称快照")
|
|||
|
|
target_type = models.CharField(max_length=32, choices=TargetType.choices, verbose_name="应用对象类型")
|
|||
|
|
target_name = models.CharField(max_length=128, verbose_name="应用对象名称")
|
|||
|
|
target_identifier = models.CharField(max_length=128, blank=True, default="", verbose_name="应用对象标识")
|
|||
|
|
remark = models.TextField(blank=True, default="", verbose_name="备注")
|
|||
|
|
operator = models.ForeignKey(
|
|||
|
|
User,
|
|||
|
|
null=True,
|
|||
|
|
blank=True,
|
|||
|
|
on_delete=models.SET_NULL,
|
|||
|
|
verbose_name="操作人",
|
|||
|
|
)
|
|||
|
|
operator_name = models.CharField(max_length=128, blank=True, default="", verbose_name="操作人名称")
|
|||
|
|
|
|||
|
|
class Meta:
|
|||
|
|
db_table = "access_control_policy_application_record"
|
|||
|
|
ordering = ['-create_time']
|