UPDATE
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
import uuid as uuid_lib
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
class SubscriptionPlan(models.Model):
|
||||
uuid = models.UUIDField(default=uuid_lib.uuid4, unique=True, editable=False, db_index=True)
|
||||
code = models.SlugField(max_length=64, unique=True, db_index=True)
|
||||
name = models.CharField(max_length=255, unique=True, db_index=True)
|
||||
description = models.TextField(blank=True, default="")
|
||||
metadata = models.JSONField(default=dict, blank=True)
|
||||
is_active = models.BooleanField(default=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
db_table = "subscription_plans"
|
||||
ordering = ["name"]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class AccessFeature(models.Model):
|
||||
PAGE = "page"
|
||||
ACTION = "action"
|
||||
WIDGET = "widget"
|
||||
SECTION = "section"
|
||||
FEATURE_TYPES = [
|
||||
(PAGE, "Page"),
|
||||
(ACTION, "Action"),
|
||||
(WIDGET, "Widget"),
|
||||
(SECTION, "Section"),
|
||||
]
|
||||
|
||||
uuid = models.UUIDField(default=uuid_lib.uuid4, unique=True, editable=False, db_index=True)
|
||||
code = models.SlugField(max_length=128, unique=True, db_index=True)
|
||||
name = models.CharField(max_length=255)
|
||||
feature_type = models.CharField(max_length=32, choices=FEATURE_TYPES, default=PAGE)
|
||||
description = models.TextField(blank=True, default="")
|
||||
default_enabled = models.BooleanField(default=False)
|
||||
metadata = models.JSONField(default=dict, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
db_table = "access_features"
|
||||
ordering = ["feature_type", "code"]
|
||||
|
||||
def __str__(self):
|
||||
return self.code
|
||||
|
||||
|
||||
class AccessRule(models.Model):
|
||||
ALLOW = "allow"
|
||||
DENY = "deny"
|
||||
EFFECTS = [
|
||||
(ALLOW, "Allow"),
|
||||
(DENY, "Deny"),
|
||||
]
|
||||
|
||||
uuid = models.UUIDField(default=uuid_lib.uuid4, unique=True, editable=False, db_index=True)
|
||||
code = models.SlugField(max_length=128, unique=True, db_index=True)
|
||||
name = models.CharField(max_length=255)
|
||||
description = models.TextField(blank=True, default="")
|
||||
effect = models.CharField(max_length=16, choices=EFFECTS, default=ALLOW)
|
||||
priority = models.PositiveIntegerField(default=100)
|
||||
is_active = models.BooleanField(default=True)
|
||||
metadata = models.JSONField(default=dict, blank=True)
|
||||
features = models.ManyToManyField(AccessFeature, related_name="rules", blank=True)
|
||||
subscription_plans = models.ManyToManyField(SubscriptionPlan, related_name="access_rules", blank=True)
|
||||
farm_types = models.ManyToManyField("farm_hub.FarmType", related_name="access_rules", blank=True)
|
||||
products = models.ManyToManyField("farm_hub.Product", related_name="access_rules", blank=True)
|
||||
sensor_catalogs = models.ManyToManyField("sensor_catalog.SensorCatalog", related_name="access_rules", blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
db_table = "access_rules"
|
||||
ordering = ["priority", "code"]
|
||||
|
||||
def __str__(self):
|
||||
return self.code
|
||||
|
||||
|
||||
class FarmAccessProfile(models.Model):
|
||||
farm = models.OneToOneField(
|
||||
"farm_hub.FarmHub",
|
||||
to_field="farm_uuid",
|
||||
db_column="farm_uuid",
|
||||
on_delete=models.CASCADE,
|
||||
related_name="access_profile",
|
||||
primary_key=True,
|
||||
)
|
||||
cached_features = models.JSONField(default=dict, blank=True)
|
||||
cached_groups = models.JSONField(default=dict, blank=True)
|
||||
matched_rules = models.JSONField(default=list, blank=True)
|
||||
metadata = models.JSONField(default=dict, blank=True)
|
||||
last_resolved_at = models.DateTimeField(null=True, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
db_table = "farm_access_profiles"
|
||||
|
||||
def __str__(self):
|
||||
return str(self.farm_id)
|
||||
|
||||
Reference in New Issue
Block a user