Clean logic

This commit is contained in:
zandercymatics 2024-08-19 10:47:13 -06:00
parent 28a7d7bee2
commit 289099dd92
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 15 additions and 4 deletions

View file

@ -212,11 +212,11 @@ class User(AbstractUser):
"""Extends clean method to perform additional validation, which can raise errors in django admin.""" """Extends clean method to perform additional validation, which can raise errors in django admin."""
super().clean() super().clean()
portfolio_perms = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio).first() portfolio_perm = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio, user=self).first()
if self.last_selected_portfolio is None and portfolio_perms._get_portfolio_permissions(): if self.last_selected_portfolio is None and portfolio_perm._get_portfolio_permissions():
raise ValidationError("When portfolio roles or additional permissions are assigned, portfolio is required.") raise ValidationError("When portfolio roles or additional permissions are assigned, portfolio is required.")
if self.last_selected_portfolio is not None and not portfolio_perms._get_portfolio_permissions(): if self.last_selected_portfolio is not None and not portfolio_perm._get_portfolio_permissions():
raise ValidationError("When portfolio is assigned, portfolio roles or additional permissions are required.") raise ValidationError("When portfolio is assigned, portfolio roles or additional permissions are required.")
def _has_portfolio_permission(self, portfolio_permission): def _has_portfolio_permission(self, portfolio_permission):
@ -225,7 +225,7 @@ class User(AbstractUser):
if not self.last_selected_portfolio: if not self.last_selected_portfolio:
return False return False
portfolio_perms = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio).first() portfolio_perms = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio, user=self).first()
if not portfolio_perms: if not portfolio_perms:
return False return False

View file

@ -1,4 +1,6 @@
from django.db import models from django.db import models
from django.forms import ValidationError
from waffle import flag_is_active
from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices from registrar.models.utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices
from .utility.time_stamped_model import TimeStampedModel from .utility.time_stamped_model import TimeStampedModel
from django.contrib.postgres.fields import ArrayField from django.contrib.postgres.fields import ArrayField
@ -93,3 +95,12 @@ class UserPortfolioPermission(TimeStampedModel):
portfolio_permissions.update(self.portfolio_additional_permissions) portfolio_permissions.update(self.portfolio_additional_permissions)
return list(portfolio_permissions) return list(portfolio_permissions)
def clean(self):
"""Extends clean method to perform additional validation, which can raise errors in django admin."""
super().clean()
if not flag_is_active(None, "multiple_portfolios") and self.pk is None:
existing_permissions = UserPortfolioPermission.objects.filter(user=self.user)
if existing_permissions.exists():
raise ValidationError("Only one portfolio permission is allowed per user when multiple portfolios are disabled.")