diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py index 29e0bc90d..21e7e196f 100644 --- a/src/registrar/models/user.py +++ b/src/registrar/models/user.py @@ -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 diff --git a/src/registrar/models/user_portfolio_permission.py b/src/registrar/models/user_portfolio_permission.py index d88c2b4f9..44d1199fc 100644 --- a/src/registrar/models/user_portfolio_permission.py +++ b/src/registrar/models/user_portfolio_permission.py @@ -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.")