From faf57902f08613223bb8f34a46dfd2c94d08b5cc Mon Sep 17 00:00:00 2001
From: David Kennedy
Date: Thu, 5 Sep 2024 19:22:31 -0400
Subject: [PATCH] filter requests based on permissions, updated actions based
on permissions
---
src/registrar/context_processors.py | 18 ++--
src/registrar/models/user.py | 44 +++++-----
.../models/utility/portfolio_helper.py | 1 -
src/registrar/templates/domain_detail.html | 4 +-
src/registrar/templates/domain_sidebar.html | 2 +-
.../templates/domain_suborganization.html | 2 +-
.../templates/includes/domains_table.html | 2 +-
.../templates/includes/header_extended.html | 2 +-
src/registrar/tests/test_models.py | 24 +++---
src/registrar/views/domain_requests_json.py | 85 +++++++++----------
src/registrar/views/utility/mixins.py | 2 +-
11 files changed, 92 insertions(+), 94 deletions(-)
diff --git a/src/registrar/context_processors.py b/src/registrar/context_processors.py
index ea04dca80..41dfb9cad 100644
--- a/src/registrar/context_processors.py
+++ b/src/registrar/context_processors.py
@@ -66,20 +66,20 @@ def portfolio_permissions(request):
return {
"has_base_portfolio_permission": request.user.has_base_portfolio_permission(portfolio),
"has_domains_portfolio_permission": request.user.has_domains_portfolio_permission(portfolio),
- "has_domain_requests_portfolio_permission": request.user.has_domain_requests_portfolio_permission(
+ "has_requests_portfolio_permission": request.user.has_requests_portfolio_permission(
portfolio
),
- "has_view_suborganization": request.user.has_view_suborganization(portfolio),
- "has_edit_suborganization": request.user.has_edit_suborganization(portfolio),
+ "has_view_suborganization_portfolio_permission": request.user.has_view_suborganization_portfolio_permission(portfolio),
+ "has_edit_suborganization_portfolio_permission": request.user.has_edit_suborganization_portfolio_permission(portfolio),
"portfolio": portfolio,
"has_organization_feature_flag": True,
}
return {
"has_base_portfolio_permission": False,
"has_domains_portfolio_permission": False,
- "has_domain_requests_portfolio_permission": False,
- "has_view_suborganization": False,
- "has_edit_suborganization": False,
+ "has_requests_portfolio_permission": False,
+ "has_view_suborganization_portfolio_permission": False,
+ "has_edit_suborganization_portfolio_permission": False,
"portfolio": None,
"has_organization_feature_flag": False,
}
@@ -89,9 +89,9 @@ def portfolio_permissions(request):
return {
"has_base_portfolio_permission": False,
"has_domains_portfolio_permission": False,
- "has_domain_requests_portfolio_permission": False,
- "has_view_suborganization": False,
- "has_edit_suborganization": False,
+ "has_requests_portfolio_permission": False,
+ "has_view_suborganization_portfolio_permission": False,
+ "has_edit_suborganization_portfolio_permission": False,
"portfolio": None,
"has_organization_feature_flag": False,
}
diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py
index 8d91c2a8c..0b5dc3f8d 100644
--- a/src/registrar/models/user.py
+++ b/src/registrar/models/user.py
@@ -223,20 +223,27 @@ class User(AbstractUser):
portfolio, UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS
) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS)
- def has_domain_requests_portfolio_permission(self, portfolio):
- return self._has_portfolio_permission(
- portfolio, UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS
- ) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_CREATED_REQUESTS)
-
- def has_view_all_domains_permission(self, portfolio):
+ def has_view_all_domains_portfolio_permission(self, 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)
+
+ def has_requests_portfolio_permission(self, portfolio):
+ return self._has_portfolio_permission(
+ portfolio, UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS
+ ) or self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_REQUESTS)
+ def has_view_all_requests_portfolio_permission(self, portfolio):
+ """Determines if the current user can view all available domain requests in a given portfolio"""
+ return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS)
+
+ def has_edit_request_portfolio_permission(self, portfolio):
+ return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_REQUESTS)
+
# Field specific permission checks
- def has_view_suborganization(self, portfolio):
+ def has_view_suborganization_portfolio_permission(self, portfolio):
return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.VIEW_SUBORGANIZATION)
- def has_edit_suborganization(self, portfolio):
+ def has_edit_suborganization_portfolio_permission(self, portfolio):
return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_SUBORGANIZATION)
def get_first_portfolio(self):
@@ -245,34 +252,31 @@ class User(AbstractUser):
return permission.portfolio
return None
- def has_edit_requests(self, portfolio):
- return self._has_portfolio_permission(portfolio, UserPortfolioPermissionChoices.EDIT_REQUESTS)
-
def portfolio_role_summary(self, portfolio):
"""Returns a list of roles based on the user's permissions."""
roles = []
# Define the conditions and their corresponding roles
conditions_roles = [
- (self.has_edit_suborganization(portfolio), ["Admin"]),
+ (self.has_edit_suborganization_portfolio_permission(portfolio), ["Admin"]),
(
- self.has_view_all_domains_permission(portfolio)
- and self.has_domain_requests_portfolio_permission(portfolio)
- and self.has_edit_requests(portfolio),
+ self.has_view_all_domains_portfolio_permission(portfolio)
+ and self.has_requests_portfolio_permission(portfolio)
+ and self.has_edit_request_portfolio_permission(portfolio),
["View-only admin", "Domain requestor"],
),
(
- self.has_view_all_domains_permission(portfolio)
- and self.has_domain_requests_portfolio_permission(portfolio),
+ self.has_view_all_domains_portfolio_permission(portfolio)
+ and self.has_requests_portfolio_permission(portfolio),
["View-only admin"],
),
(
self.has_base_portfolio_permission(portfolio)
- and self.has_edit_requests(portfolio)
+ and self.has_edit_request_portfolio_permission(portfolio)
and self.has_domains_portfolio_permission(portfolio),
["Domain requestor", "Domain manager"],
),
- (self.has_base_portfolio_permission(portfolio) and self.has_edit_requests(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),
["Domain manager"],
@@ -443,7 +447,7 @@ class User(AbstractUser):
def get_user_domain_ids(self, request):
"""Returns either the domains ids associated with this user on UserDomainRole or Portfolio"""
portfolio = request.session.get("portfolio")
- if self.is_org_user(request) and self.has_view_all_domains_permission(portfolio):
+ if self.is_org_user(request) and self.has_view_all_domains_portfolio_permission(portfolio):
return DomainInformation.objects.filter(portfolio=portfolio).values_list("domain_id", flat=True)
else:
return UserDomainRole.objects.filter(user=self).values_list("domain_id", flat=True)
diff --git a/src/registrar/models/utility/portfolio_helper.py b/src/registrar/models/utility/portfolio_helper.py
index 86aaa5e16..d87f981c7 100644
--- a/src/registrar/models/utility/portfolio_helper.py
+++ b/src/registrar/models/utility/portfolio_helper.py
@@ -21,7 +21,6 @@ class UserPortfolioPermissionChoices(models.TextChoices):
EDIT_MEMBER = "edit_member", "Create and edit members"
VIEW_ALL_REQUESTS = "view_all_requests", "View all requests"
- VIEW_CREATED_REQUESTS = "view_created_requests", "View created requests"
EDIT_REQUESTS = "edit_requests", "Create and edit requests"
VIEW_PORTFOLIO = "view_portfolio", "View organization"
diff --git a/src/registrar/templates/domain_detail.html b/src/registrar/templates/domain_detail.html
index d7bc277b3..d93f313c1 100644
--- a/src/registrar/templates/domain_detail.html
+++ b/src/registrar/templates/domain_detail.html
@@ -72,9 +72,9 @@
{% include "includes/summary_item.html" with title='DNSSEC' value='Not Enabled' edit_link=url editable=is_editable %}
{% endif %}
- {% if portfolio and has_domains_portfolio_permission and has_view_suborganization %}
+ {% if portfolio and has_domains_portfolio_permission and has_view_suborganization_portfolio_permission %}
{% 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 %}
+ {% 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 %}
{% url 'domain-org-name-address' pk=domain.id as url %}
{% include "includes/summary_item.html" with title='Organization name and mailing address' value=domain.domain_info address='true' edit_link=url editable=is_editable %}
diff --git a/src/registrar/templates/domain_sidebar.html b/src/registrar/templates/domain_sidebar.html
index 24f92bf16..82a3f8ed1 100644
--- a/src/registrar/templates/domain_sidebar.html
+++ b/src/registrar/templates/domain_sidebar.html
@@ -61,7 +61,7 @@
{% if portfolio %}
{% 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 %}
+ {% if has_domains_portfolio_permission and has_view_suborganization_portfolio_permission %}
{% with url_name="domain-suborganization" %}
{% include "includes/domain_sidenav_item.html" with item_text="Suborganization" %}
{% endwith %}
diff --git a/src/registrar/templates/domain_suborganization.html b/src/registrar/templates/domain_suborganization.html
index 823629213..d0c41ff09 100644
--- a/src/registrar/templates/domain_suborganization.html
+++ b/src/registrar/templates/domain_suborganization.html
@@ -15,7 +15,7 @@
If you believe there is an error please contact help@get.gov.
- {% if has_domains_portfolio_permission and has_edit_suborganization %}
+ {% if has_domains_portfolio_permission and has_edit_suborganization_portfolio_permission %}