mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-31 09:43:54 +02:00
cleanup
This commit is contained in:
parent
733eee6fcc
commit
f587a994f2
5 changed files with 36 additions and 34 deletions
|
@ -118,23 +118,6 @@ class FilteredSelectMultipleArrayWidget(FilteredSelectMultiple):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class UserPortfolioPermissionsForm(forms.ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.UserPortfolioPermission
|
|
||||||
fields = "__all__"
|
|
||||||
field_classes = {"username": UsernameField}
|
|
||||||
widgets = {
|
|
||||||
"portfolio_roles": FilteredSelectMultipleArrayWidget(
|
|
||||||
"portfolio_roles", is_stacked=False, choices=UserPortfolioRoleChoices.choices
|
|
||||||
),
|
|
||||||
"portfolio_additional_permissions": FilteredSelectMultipleArrayWidget(
|
|
||||||
"portfolio_additional_permissions",
|
|
||||||
is_stacked=False,
|
|
||||||
choices=UserPortfolioPermissionChoices.choices,
|
|
||||||
),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class MyUserAdminForm(UserChangeForm):
|
class MyUserAdminForm(UserChangeForm):
|
||||||
"""This form utilizes the custom widget for its class's ManyToMany UIs.
|
"""This form utilizes the custom widget for its class's ManyToMany UIs.
|
||||||
|
|
||||||
|
@ -178,6 +161,22 @@ class MyUserAdminForm(UserChangeForm):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class UserPortfolioPermissionsForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.UserPortfolioPermission
|
||||||
|
fields = "__all__"
|
||||||
|
widgets = {
|
||||||
|
"portfolio_roles": FilteredSelectMultipleArrayWidget(
|
||||||
|
"portfolio_roles", is_stacked=False, choices=UserPortfolioRoleChoices.choices
|
||||||
|
),
|
||||||
|
"portfolio_additional_permissions": FilteredSelectMultipleArrayWidget(
|
||||||
|
"portfolio_additional_permissions",
|
||||||
|
is_stacked=False,
|
||||||
|
choices=UserPortfolioPermissionChoices.choices,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class PortfolioInvitationAdminForm(UserChangeForm):
|
class PortfolioInvitationAdminForm(UserChangeForm):
|
||||||
"""This form utilizes the custom widget for its class's ManyToMany UIs."""
|
"""This form utilizes the custom widget for its class's ManyToMany UIs."""
|
||||||
|
|
||||||
|
@ -1211,8 +1210,10 @@ class UserDomainRoleResource(resources.ModelResource):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.UserDomainRole
|
model = models.UserDomainRole
|
||||||
|
|
||||||
|
|
||||||
class UserPortfolioPermissionAdmin(ListHeaderAdmin):
|
class UserPortfolioPermissionAdmin(ListHeaderAdmin):
|
||||||
form = UserPortfolioPermissionsForm
|
form = UserPortfolioPermissionsForm
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Contains meta information about this class"""
|
"""Contains meta information about this class"""
|
||||||
|
|
||||||
|
@ -1227,10 +1228,7 @@ class UserPortfolioPermissionAdmin(ListHeaderAdmin):
|
||||||
"portfolio",
|
"portfolio",
|
||||||
]
|
]
|
||||||
|
|
||||||
autocomplete_fields = [
|
autocomplete_fields = ["user", "portfolio"]
|
||||||
"user",
|
|
||||||
"portfolio"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class UserDomainRoleAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
class UserDomainRoleAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
|
|
|
@ -72,4 +72,4 @@ auditlog.register(Portfolio)
|
||||||
auditlog.register(DomainGroup)
|
auditlog.register(DomainGroup)
|
||||||
auditlog.register(Suborganization)
|
auditlog.register(Suborganization)
|
||||||
auditlog.register(SeniorOfficial)
|
auditlog.register(SeniorOfficial)
|
||||||
auditlog.register(UserPortfolioPermission)
|
auditlog.register(UserPortfolioPermission)
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
"""People are invited by email to administer domains."""
|
"""People are invited by email to administer domains."""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from django_fsm import FSMField, transition
|
from django_fsm import FSMField, transition
|
||||||
from waffle import flag_is_active
|
|
||||||
|
|
||||||
from registrar.models.user_portfolio_permission import UserPortfolioPermission
|
from registrar.models.user_portfolio_permission import UserPortfolioPermission
|
||||||
from .utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices # type: ignore
|
from .utility.portfolio_helper import UserPortfolioPermissionChoices, UserPortfolioRoleChoices # type: ignore
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
@ -90,7 +85,9 @@ class PortfolioInvitation(TimeStampedModel):
|
||||||
raise RuntimeError("Cannot find the user to retrieve this portfolio invitation.")
|
raise RuntimeError("Cannot find the user to retrieve this portfolio invitation.")
|
||||||
|
|
||||||
# and create a role for that user on this portfolio
|
# and create a role for that user on this portfolio
|
||||||
user_portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create(portfolio=self.portfolio, user=user)
|
user_portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create(
|
||||||
|
portfolio=self.portfolio, user=user
|
||||||
|
)
|
||||||
if self.portfolio_roles and len(self.portfolio_roles) > 0:
|
if self.portfolio_roles and len(self.portfolio_roles) > 0:
|
||||||
user_portfolio_permission.portfolio_roles = self.portfolio_roles
|
user_portfolio_permission.portfolio_roles = self.portfolio_roles
|
||||||
if self.portfolio_additional_permissions and len(self.portfolio_additional_permissions) > 0:
|
if self.portfolio_additional_permissions and len(self.portfolio_additional_permissions) > 0:
|
||||||
|
|
|
@ -377,7 +377,9 @@ class User(AbstractUser):
|
||||||
for invitation in PortfolioInvitation.objects.filter(
|
for invitation in PortfolioInvitation.objects.filter(
|
||||||
email__iexact=self.email, status=PortfolioInvitation.PortfolioInvitationStatus.INVITED
|
email__iexact=self.email, status=PortfolioInvitation.PortfolioInvitationStatus.INVITED
|
||||||
):
|
):
|
||||||
only_single_portfolio = not flag_is_active(None, "multiple_portfolios") and self.last_selected_portfolio is None
|
only_single_portfolio = (
|
||||||
|
not flag_is_active(None, "multiple_portfolios") and self.last_selected_portfolio is None
|
||||||
|
)
|
||||||
if only_single_portfolio or flag_is_active(None, "multiple_portfolios"):
|
if only_single_portfolio or flag_is_active(None, "multiple_portfolios"):
|
||||||
try:
|
try:
|
||||||
invitation.retrieve()
|
invitation.retrieve()
|
||||||
|
@ -410,6 +412,8 @@ class User(AbstractUser):
|
||||||
def get_user_domain_ids(self, request):
|
def get_user_domain_ids(self, request):
|
||||||
"""Returns either the domains ids associated with this user on UserDomainRole or Portfolio"""
|
"""Returns either the domains ids associated with this user on UserDomainRole or Portfolio"""
|
||||||
if self.is_org_user(request) and self.has_view_all_domains_permission():
|
if self.is_org_user(request) and self.has_view_all_domains_permission():
|
||||||
return DomainInformation.objects.filter(portfolio=self.last_selected_portfolio).values_list("domain_id", flat=True)
|
return DomainInformation.objects.filter(portfolio=self.last_selected_portfolio).values_list(
|
||||||
|
"domain_id", flat=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
return UserDomainRole.objects.filter(user=self).values_list("domain_id", flat=True)
|
return UserDomainRole.objects.filter(user=self).values_list("domain_id", flat=True)
|
||||||
|
|
|
@ -76,8 +76,9 @@ class UserPortfolioPermission(TimeStampedModel):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return (
|
return (
|
||||||
f"User '{self.user}' on Portfolio '{self.portfolio}' "
|
f"User '{self.user}' on Portfolio '{self.portfolio}' " f"<Roles: {self.portfolio_roles}>"
|
||||||
f"<Roles: {self.portfolio_roles}>"
|
if self.portfolio_roles
|
||||||
|
else ""
|
||||||
)
|
)
|
||||||
|
|
||||||
def _get_portfolio_permissions(self):
|
def _get_portfolio_permissions(self):
|
||||||
|
@ -95,7 +96,7 @@ 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):
|
def clean(self):
|
||||||
"""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()
|
||||||
|
@ -103,4 +104,6 @@ class UserPortfolioPermission(TimeStampedModel):
|
||||||
if not flag_is_active(None, "multiple_portfolios") and self.pk is None:
|
if not flag_is_active(None, "multiple_portfolios") and self.pk is None:
|
||||||
existing_permissions = UserPortfolioPermission.objects.filter(user=self.user)
|
existing_permissions = UserPortfolioPermission.objects.filter(user=self.user)
|
||||||
if existing_permissions.exists():
|
if existing_permissions.exists():
|
||||||
raise ValidationError("Only one portfolio permission is allowed per user when multiple portfolios are disabled.")
|
raise ValidationError(
|
||||||
|
"Only one portfolio permission is allowed per user when multiple portfolios are disabled."
|
||||||
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue