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."""
super().clean()
portfolio_perms = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio).first()
if self.last_selected_portfolio is None and portfolio_perms._get_portfolio_permissions():
portfolio_perm = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio, user=self).first()
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.")
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.")
def _has_portfolio_permission(self, portfolio_permission):
@ -225,7 +225,7 @@ class User(AbstractUser):
if not self.last_selected_portfolio:
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:
return False

View file

@ -1,4 +1,6 @@
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 .utility.time_stamped_model import TimeStampedModel
from django.contrib.postgres.fields import ArrayField
@ -93,3 +95,12 @@ class UserPortfolioPermission(TimeStampedModel):
portfolio_permissions.update(self.portfolio_additional_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.")