Skip to content

Commit 6400e68

Browse files
committed
feat: Adding Database Constraint for ACLStandard Rule, so that at max only one Source Field can be specified
1 parent 1dd426c commit 6400e68

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

netbox_acls/models/access_list_rules.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.apps import apps
66
from django.contrib.postgres.fields import ArrayField
77
from django.db import models
8+
from django.db.models import Q
89
from django.urls import reverse
910
from netbox.models import NetBoxModel
1011
from ipam.models import Prefix, IPRange, IPAddress, Aggregate, Service
@@ -167,6 +168,32 @@ class Meta(ACLRule.Meta):
167168
verbose_name = "ACL Standard Rule"
168169
verbose_name_plural = "ACL Standard Rules"
169170

171+
constraints = [
172+
models.CheckConstraint(
173+
check=(
174+
(
175+
Q(source_prefix__isnull=True) & Q(source_iprange__isnull=True) & Q(source_ipaddress__isnull=True) & Q(source_aggregate__isnull=True) & Q(source_service__isnull=True)
176+
) |
177+
(
178+
Q(source_prefix__isnull=False) & Q(source_iprange__isnull=True) & Q(source_ipaddress__isnull=True) & Q(source_aggregate__isnull=True) & Q(source_service__isnull=True)
179+
) |
180+
(
181+
Q(source_prefix__isnull=True) & Q(source_iprange__isnull=False) & Q(source_ipaddress__isnull=True) & Q(source_aggregate__isnull=True) & Q(source_service__isnull=True)
182+
) |
183+
(
184+
Q(source_prefix__isnull=True) & Q(source_iprange__isnull=True) & Q(source_ipaddress__isnull=False) & Q(source_aggregate__isnull=True) & Q(source_service__isnull=True)
185+
) |
186+
(
187+
Q(source_prefix__isnull=True) & Q(source_iprange__isnull=True) & Q(source_ipaddress__isnull=True) & Q(source_aggregate__isnull=False) & Q(source_service__isnull=True)
188+
) |
189+
(
190+
Q(source_prefix__isnull=True) & Q(source_iprange__isnull=True) & Q(source_ipaddress__isnull=True) & Q(source_aggregate__isnull=True) & Q(source_service__isnull=False)
191+
)
192+
),
193+
name='not_more_than_one_source_for_standard_rule'
194+
)
195+
]
196+
170197

171198
class ACLExtendedRule(ACLRule):
172199
"""

0 commit comments

Comments
 (0)