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']
|