UnisKB/apps/system_manage/models/access_control_policy.py

77 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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