UnisKB/apps/system_manage/models/access_control_policy.py

77 lines
3.2 KiB
Python
Raw Normal View History

# coding=utf-8
"""
@project: MaxKB
@AuthorTanLianWang
@file access_control_policy.py
@date2026/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']