This commit is contained in:
Rachid Mrad 2024-09-06 13:46:52 -04:00
parent 49e656082a
commit 1e9ae7befc
No known key found for this signature in database
14 changed files with 44 additions and 42 deletions

View file

@ -1717,7 +1717,7 @@ document.addEventListener('DOMContentLoaded', function() {
role="button" role="button"
id="button-toggle-delete-domain-alert-${request.id}" id="button-toggle-delete-domain-alert-${request.id}"
href="#toggle-delete-domain-alert-${request.id}" href="#toggle-delete-domain-alert-${request.id}"
class="usa-button text-secondary usa-button--unstyled text-no-underline late-loading-modal-trigger margin-top-2 visible-mobile" class="usa-button text-secondary usa-button--unstyled text-no-underline late-loading-modal-trigger margin-top-2 visible-mobile-flex"
aria-controls="toggle-delete-domain-alert-${request.id}" aria-controls="toggle-delete-domain-alert-${request.id}"
data-open-modal data-open-modal
> >
@ -1726,7 +1726,7 @@ document.addEventListener('DOMContentLoaded', function() {
</svg> Delete <span class="usa-sr-only">${domainName}</span> </svg> Delete <span class="usa-sr-only">${domainName}</span>
</a> </a>
<div class="usa-accordion usa-accordion--more-actions margin-right-2 hidden-mobile"> <div class="usa-accordion usa-accordion--more-actions margin-right-2 hidden-mobile-flex">
<div class="usa-accordion__heading"> <div class="usa-accordion__heading">
<button <button
type="button" type="button"

View file

@ -159,18 +159,18 @@ abbr[title] {
} }
} }
.hidden-mobile { .hidden-mobile-flex {
display: none!important; display: none!important;
} }
.visible-mobile { .visible-mobile-flex {
display: block!important; display: flex!important;
} }
@include at-media(tablet) { @include at-media(tablet) {
.hidden-mobile { .hidden-mobile-flex {
display: block!important; display: flex!important;
} }
.visible-mobile { .visible-mobile-flex {
display: none!important; display: none!important;
} }
} }

View file

@ -211,6 +211,7 @@ a.usa-button--unstyled:visited {
align-items: center; align-items: center;
} }
.dotgov-table a
a .usa-icon, a .usa-icon,
.usa-button--with-icon .usa-icon { .usa-button--with-icon .usa-icon {
height: 1.3em; height: 1.3em;
@ -224,6 +225,7 @@ a .usa-icon,
} }
button.text-secondary, button.text-secondary,
button.text-secondary:hover,
.dotgov-table a.text-secondary { .dotgov-table a.text-secondary {
color: $theme-color-error; color: $theme-color-error;
} }

View file

@ -62,8 +62,8 @@ def portfolio_permissions(request):
"""Make portfolio permissions for the request user available in global context""" """Make portfolio permissions for the request user available in global context"""
default_context = { default_context = {
"has_base_portfolio_permission": False, "has_base_portfolio_permission": False,
"has_domains_portfolio_permission": False, "has_any_domains_portfolio_permission": False,
"has_requests_portfolio_permission": False, "has_any_requests_portfolio_permission": False,
"has_edit_request_portfolio_permission": False, "has_edit_request_portfolio_permission": False,
"has_view_suborganization_portfolio_permission": False, "has_view_suborganization_portfolio_permission": False,
"has_edit_suborganization_portfolio_permission": False, "has_edit_suborganization_portfolio_permission": False,
@ -75,8 +75,8 @@ def portfolio_permissions(request):
if portfolio: if portfolio:
return { return {
"has_base_portfolio_permission": request.user.has_base_portfolio_permission(portfolio), "has_base_portfolio_permission": request.user.has_base_portfolio_permission(portfolio),
"has_domains_portfolio_permission": request.user.has_domains_portfolio_permission(portfolio), "has_any_domains_portfolio_permission": request.user.has_any_domains_portfolio_permission(portfolio),
"has_requests_portfolio_permission": request.user.has_requests_portfolio_permission( "has_any_requests_portfolio_permission": request.user.has_any_requests_portfolio_permission(
portfolio portfolio
), ),
"has_edit_request_portfolio_permission": request.user.has_edit_request_portfolio_permission(portfolio), "has_edit_request_portfolio_permission": request.user.has_edit_request_portfolio_permission(portfolio),

View file

@ -218,7 +218,7 @@ class User(AbstractUser):
def has_edit_org_portfolio_permission(self, portfolio): def has_edit_org_portfolio_permission(self, portfolio):
return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_PORTFOLIO) return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_PORTFOLIO)
def has_domains_portfolio_permission(self, portfolio): def has_any_domains_portfolio_permission(self, portfolio):
return self._has_portfolio_permission( return self._has_portfolio_permission(
portfolio, UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS portfolio, UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS
) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS) ) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS)
@ -227,7 +227,7 @@ class User(AbstractUser):
"""Determines if the current user can view all available domains in a given portfolio""" """Determines if the current user can view all available domains in a given portfolio"""
return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS) return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS)
def has_requests_portfolio_permission(self, portfolio): def has_any_requests_portfolio_permission(self, portfolio):
return self._has_portfolio_permission( return self._has_portfolio_permission(
portfolio, UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS portfolio, UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS
) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_REQUESTS) ) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_REQUESTS)
@ -261,24 +261,24 @@ class User(AbstractUser):
(self.has_edit_suborganization_portfolio_permission(portfolio), ["Admin"]), (self.has_edit_suborganization_portfolio_permission(portfolio), ["Admin"]),
( (
self.has_view_all_domains_portfolio_permission(portfolio) self.has_view_all_domains_portfolio_permission(portfolio)
and self.has_requests_portfolio_permission(portfolio) and self.has_any_requests_portfolio_permission(portfolio)
and self.has_edit_request_portfolio_permission(portfolio), and self.has_edit_request_portfolio_permission(portfolio),
["View-only admin", "Domain requestor"], ["View-only admin", "Domain requestor"],
), ),
( (
self.has_view_all_domains_portfolio_permission(portfolio) self.has_view_all_domains_portfolio_permission(portfolio)
and self.has_requests_portfolio_permission(portfolio), and self.has_any_requests_portfolio_permission(portfolio),
["View-only admin"], ["View-only admin"],
), ),
( (
self.has_base_portfolio_permission(portfolio) self.has_base_portfolio_permission(portfolio)
and self.has_edit_request_portfolio_permission(portfolio) and self.has_edit_request_portfolio_permission(portfolio)
and self.has_domains_portfolio_permission(portfolio), and self.has_any_domains_portfolio_permission(portfolio),
["Domain requestor", "Domain manager"], ["Domain requestor", "Domain manager"],
), ),
(self.has_base_portfolio_permission(portfolio) and self.has_edit_request_portfolio_permission(portfolio), ["Domain requestor"]), (self.has_base_portfolio_permission(portfolio) and self.has_edit_request_portfolio_permission(portfolio), ["Domain requestor"]),
( (
self.has_base_portfolio_permission(portfolio) and self.has_domains_portfolio_permission(portfolio), self.has_base_portfolio_permission(portfolio) and self.has_any_domains_portfolio_permission(portfolio),
["Domain manager"], ["Domain manager"],
), ),
(self.has_base_portfolio_permission(portfolio), ["Member"]), (self.has_base_portfolio_permission(portfolio), ["Member"]),

View file

@ -165,7 +165,7 @@ class CheckPortfolioMiddleware:
if request.session.get("portfolio"): if request.session.get("portfolio"):
if current_path == self.home: if current_path == self.home:
if request.user.has_domains_portfolio_permission(request.session["portfolio"]): if request.user.has_any_domains_portfolio_permission(request.session["portfolio"]):
portfolio_redirect = reverse("domains") portfolio_redirect = reverse("domains")
else: else:
portfolio_redirect = reverse("no-portfolio-domains") portfolio_redirect = reverse("no-portfolio-domains")

View file

@ -72,7 +72,7 @@
{% include "includes/summary_item.html" with title='DNSSEC' value='Not Enabled' edit_link=url editable=is_editable %} {% include "includes/summary_item.html" with title='DNSSEC' value='Not Enabled' edit_link=url editable=is_editable %}
{% endif %} {% endif %}
{% if portfolio and has_domains_portfolio_permission and has_view_suborganization_portfolio_permission %} {% if portfolio and has_any_domains_portfolio_permission and has_view_suborganization_portfolio_permission %}
{% url 'domain-suborganization' pk=domain.id as url %} {% url 'domain-suborganization' pk=domain.id as url %}
{% include "includes/summary_item.html" with title='Suborganization' value=domain.domain_info.sub_organization edit_link=url editable=is_editable|and:has_edit_suborganization_portfolio_permission %} {% include "includes/summary_item.html" with title='Suborganization' value=domain.domain_info.sub_organization edit_link=url editable=is_editable|and:has_edit_suborganization_portfolio_permission %}
{% else %} {% else %}

View file

@ -61,7 +61,7 @@
{% if portfolio %} {% if portfolio %}
{% comment %} Only show this menu option if the user has the perms to do so {% endcomment %} {% comment %} Only show this menu option if the user has the perms to do so {% endcomment %}
{% if has_domains_portfolio_permission and has_view_suborganization_portfolio_permission %} {% if has_any_domains_portfolio_permission and has_view_suborganization_portfolio_permission %}
{% with url_name="domain-suborganization" %} {% with url_name="domain-suborganization" %}
{% include "includes/domain_sidenav_item.html" with item_text="Suborganization" %} {% include "includes/domain_sidenav_item.html" with item_text="Suborganization" %}
{% endwith %} {% endwith %}

View file

@ -15,7 +15,7 @@
If you believe there is an error please contact <a href="mailto:help@get.gov" class="usa-link">help@get.gov</a>. If you believe there is an error please contact <a href="mailto:help@get.gov" class="usa-link">help@get.gov</a>.
</p> </p>
{% if has_domains_portfolio_permission and has_edit_suborganization_portfolio_permission %} {% if has_any_domains_portfolio_permission and has_edit_suborganization_portfolio_permission %}
<form class="usa-form usa-form--large" method="post" novalidate id="form-container"> <form class="usa-form usa-form--large" method="post" novalidate id="form-container">
{% csrf_token %} {% csrf_token %}
{% input_with_errors form.sub_organization %} {% input_with_errors form.sub_organization %}

View file

@ -37,7 +37,7 @@
</div> </div>
<ul class="usa-nav__primary usa-accordion"> <ul class="usa-nav__primary usa-accordion">
<li class="usa-nav__primary-item"> <li class="usa-nav__primary-item">
{% if has_domains_portfolio_permission %} {% if has_any_domains_portfolio_permission %}
{% url 'domains' as url %} {% url 'domains' as url %}
{% else %} {% else %}
{% url 'no-portfolio-domains' as url %} {% url 'no-portfolio-domains' as url %}
@ -77,7 +77,7 @@
</li> </li>
</ul> </ul>
<!-- user has view but no edit permissions --> <!-- user has view but no edit permissions -->
{% elif has_requests_portfolio_permission %} {% elif has_any_requests_portfolio_permission %}
{% url 'domain-requests' as url %} {% url 'domain-requests' as url %}
<a href="{{ url }}" class="usa-nav-link{% if 'request'|in_path:request.path %} usa-current{% endif %}"> <a href="{{ url }}" class="usa-nav-link{% if 'request'|in_path:request.path %} usa-current{% endif %}">
Domain requests Domain requests

View file

@ -1334,7 +1334,7 @@ class TestUser(TestCase):
@patch.multiple( @patch.multiple(
User, User,
has_view_all_domains_portfolio_permission=lambda self, portfolio: True, has_view_all_domains_portfolio_permission=lambda self, portfolio: True,
has_requests_portfolio_permission=lambda self, portfolio: True, has_any_requests_portfolio_permission=lambda self, portfolio: True,
has_edit_request_portfolio_permission=lambda self, portfolio: True, has_edit_request_portfolio_permission=lambda self, portfolio: True,
) )
def test_portfolio_role_summary_view_only_admin_and_domain_requestor(self): def test_portfolio_role_summary_view_only_admin_and_domain_requestor(self):
@ -1344,7 +1344,7 @@ class TestUser(TestCase):
@patch.multiple( @patch.multiple(
User, User,
has_view_all_domains_portfolio_permission=lambda self, portfolio: True, has_view_all_domains_portfolio_permission=lambda self, portfolio: True,
has_requests_portfolio_permission=lambda self, portfolio: True, has_any_requests_portfolio_permission=lambda self, portfolio: True,
) )
def test_portfolio_role_summary_view_only_admin(self): def test_portfolio_role_summary_view_only_admin(self):
# Test if the user is recognized as a View-only admin # Test if the user is recognized as a View-only admin
@ -1354,7 +1354,7 @@ class TestUser(TestCase):
User, User,
has_base_portfolio_permission=lambda self, portfolio: True, has_base_portfolio_permission=lambda self, portfolio: True,
has_edit_request_portfolio_permission=lambda self, portfolio: True, has_edit_request_portfolio_permission=lambda self, portfolio: True,
has_domains_portfolio_permission=lambda self, portfolio: True, has_any_domains_portfolio_permission=lambda self, portfolio: True,
) )
def test_portfolio_role_summary_member_domain_requestor_domain_manager(self): def test_portfolio_role_summary_member_domain_requestor_domain_manager(self):
# Test if the user has 'Member', 'Domain requestor', and 'Domain manager' roles # Test if the user has 'Member', 'Domain requestor', and 'Domain manager' roles
@ -1370,7 +1370,7 @@ class TestUser(TestCase):
@patch.multiple( @patch.multiple(
User, User,
has_base_portfolio_permission=lambda self, portfolio: True, has_base_portfolio_permission=lambda self, portfolio: True,
has_domains_portfolio_permission=lambda self, portfolio: True, has_any_domains_portfolio_permission=lambda self, portfolio: True,
) )
def test_portfolio_role_summary_member_domain_manager(self): def test_portfolio_role_summary_member_domain_manager(self):
# Test if the user has 'Member' and 'Domain manager' roles # Test if the user has 'Member' and 'Domain manager' roles
@ -1546,8 +1546,8 @@ class TestUser(TestCase):
portfolio, _ = Portfolio.objects.get_or_create(creator=self.user, organization_name="Hotel California") portfolio, _ = Portfolio.objects.get_or_create(creator=self.user, organization_name="Hotel California")
user_can_view_all_domains = self.user.has_domains_portfolio_permission(portfolio) user_can_view_all_domains = self.user.has_any_domains_portfolio_permission(portfolio)
user_can_view_all_requests = self.user.has_requests_portfolio_permission(portfolio) user_can_view_all_requests = self.user.has_any_requests_portfolio_permission(portfolio)
self.assertFalse(user_can_view_all_domains) self.assertFalse(user_can_view_all_domains)
self.assertFalse(user_can_view_all_requests) self.assertFalse(user_can_view_all_requests)
@ -1558,8 +1558,8 @@ class TestUser(TestCase):
additional_permissions=[UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS], additional_permissions=[UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS],
) )
user_can_view_all_domains = self.user.has_domains_portfolio_permission(portfolio) user_can_view_all_domains = self.user.has_any_domains_portfolio_permission(portfolio)
user_can_view_all_requests = self.user.has_requests_portfolio_permission(portfolio) user_can_view_all_requests = self.user.has_any_requests_portfolio_permission(portfolio)
self.assertTrue(user_can_view_all_domains) self.assertTrue(user_can_view_all_domains)
self.assertFalse(user_can_view_all_requests) self.assertFalse(user_can_view_all_requests)
@ -1568,16 +1568,16 @@ class TestUser(TestCase):
portfolio_permission.save() portfolio_permission.save()
portfolio_permission.refresh_from_db() portfolio_permission.refresh_from_db()
user_can_view_all_domains = self.user.has_domains_portfolio_permission(portfolio) user_can_view_all_domains = self.user.has_any_domains_portfolio_permission(portfolio)
user_can_view_all_requests = self.user.has_requests_portfolio_permission(portfolio) user_can_view_all_requests = self.user.has_any_requests_portfolio_permission(portfolio)
self.assertTrue(user_can_view_all_domains) self.assertTrue(user_can_view_all_domains)
self.assertTrue(user_can_view_all_requests) self.assertTrue(user_can_view_all_requests)
UserDomainRole.objects.get_or_create(user=self.user, domain=self.domain, role=UserDomainRole.Roles.MANAGER) UserDomainRole.objects.get_or_create(user=self.user, domain=self.domain, role=UserDomainRole.Roles.MANAGER)
user_can_view_all_domains = self.user.has_domains_portfolio_permission(portfolio) user_can_view_all_domains = self.user.has_any_domains_portfolio_permission(portfolio)
user_can_view_all_requests = self.user.has_requests_portfolio_permission(portfolio) user_can_view_all_requests = self.user.has_any_requests_portfolio_permission(portfolio)
self.assertTrue(user_can_view_all_domains) self.assertTrue(user_can_view_all_domains)
self.assertTrue(user_can_view_all_requests) self.assertTrue(user_can_view_all_requests)

View file

@ -502,7 +502,7 @@ class TestPortfolio(WebTest):
self.client.force_login(self.user) self.client.force_login(self.user)
response = self.client.get(reverse("home"), follow=True) response = self.client.get(reverse("home"), follow=True)
self.assertFalse(self.user.has_domains_portfolio_permission(response.wsgi_request.session.get("portfolio"))) self.assertFalse(self.user.has_any_domains_portfolio_permission(response.wsgi_request.session.get("portfolio")))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertContains(response, "You aren") self.assertContains(response, "You aren")
@ -517,7 +517,7 @@ class TestPortfolio(WebTest):
# Test the domains page - this user should have access # Test the domains page - this user should have access
response = self.client.get(reverse("domains")) response = self.client.get(reverse("domains"))
self.assertTrue(self.user.has_domains_portfolio_permission(response.wsgi_request.session.get("portfolio"))) self.assertTrue(self.user.has_any_domains_portfolio_permission(response.wsgi_request.session.get("portfolio")))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertContains(response, "Domain name") self.assertContains(response, "Domain name")
@ -528,7 +528,7 @@ class TestPortfolio(WebTest):
# Test the domains page - this user should have access # Test the domains page - this user should have access
response = self.client.get(reverse("domains")) response = self.client.get(reverse("domains"))
self.assertTrue(self.user.has_domains_portfolio_permission(response.wsgi_request.session.get("portfolio"))) self.assertTrue(self.user.has_any_domains_portfolio_permission(response.wsgi_request.session.get("portfolio")))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertContains(response, "Domain name") self.assertContains(response, "Domain name")
permission.delete() permission.delete()

View file

@ -175,7 +175,7 @@ class DomainView(DomainBaseView):
If particular views allow permissions, they will need to override If particular views allow permissions, they will need to override
this function.""" this function."""
portfolio = self.request.session.get("portfolio") portfolio = self.request.session.get("portfolio")
if self.request.user.has_domains_portfolio_permission(portfolio): if self.request.user.has_any_domains_portfolio_permission(portfolio):
if Domain.objects.filter(id=pk).exists(): if Domain.objects.filter(id=pk).exists():
domain = Domain.objects.get(id=pk) domain = Domain.objects.get(id=pk)
if domain.domain_info.portfolio == portfolio: if domain.domain_info.portfolio == portfolio:

View file

@ -433,7 +433,7 @@ class PortfolioDomainsPermission(PortfolioBasePermission):
up from the portfolio's primary key in self.kwargs["pk"]""" up from the portfolio's primary key in self.kwargs["pk"]"""
portfolio = self.request.session.get("portfolio") portfolio = self.request.session.get("portfolio")
if not self.request.user.has_domains_portfolio_permission(portfolio): if not self.request.user.has_any_domains_portfolio_permission(portfolio):
return False return False
return super().has_permission() return super().has_permission()
@ -450,7 +450,7 @@ class PortfolioDomainRequestsPermission(PortfolioBasePermission):
up from the portfolio's primary key in self.kwargs["pk"]""" up from the portfolio's primary key in self.kwargs["pk"]"""
portfolio = self.request.session.get("portfolio") portfolio = self.request.session.get("portfolio")
if not self.request.user.has_requests_portfolio_permission(portfolio): if not self.request.user.has_any_requests_portfolio_permission(portfolio):
return False return False
return super().has_permission() return super().has_permission()