mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-13 04:59:59 +02:00
initial updates to forms, templates, and javascript
This commit is contained in:
parent
3ca79aef90
commit
1cae575814
4 changed files with 89 additions and 81 deletions
|
@ -125,38 +125,26 @@ class BasePortfolioMemberForm(forms.ModelForm):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
domain_request_permission_admin = forms.ChoiceField(
|
domain_permission_member = forms.ChoiceField(
|
||||||
label=mark_safe(f"Select permission {required_star}"), # nosec
|
label=mark_safe(f"Select permission {required_star}"), # nosec
|
||||||
choices=[
|
choices=[
|
||||||
(UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS.value, "View all requests"),
|
(UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS.value, "Viewer, limited"),
|
||||||
(UserPortfolioPermissionChoices.EDIT_REQUESTS.value, "View all requests plus create requests"),
|
(UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS.value, "Viewer, all"),
|
||||||
],
|
],
|
||||||
widget=forms.RadioSelect,
|
widget=forms.RadioSelect,
|
||||||
required=False,
|
required=False,
|
||||||
error_messages={
|
error_messages={
|
||||||
"required": "Admin domain request permission is required",
|
"required": "Member domain permission is required",
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
member_permission_admin = forms.ChoiceField(
|
|
||||||
label=mark_safe(f"Select permission {required_star}"), # nosec
|
|
||||||
choices=[
|
|
||||||
(UserPortfolioPermissionChoices.VIEW_MEMBERS.value, "View all members"),
|
|
||||||
(UserPortfolioPermissionChoices.EDIT_MEMBERS.value, "View all members plus manage members"),
|
|
||||||
],
|
|
||||||
widget=forms.RadioSelect,
|
|
||||||
required=False,
|
|
||||||
error_messages={
|
|
||||||
"required": "Admin member permission is required",
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
domain_request_permission_member = forms.ChoiceField(
|
domain_request_permission_member = forms.ChoiceField(
|
||||||
label=mark_safe(f"Select permission {required_star}"), # nosec
|
label=mark_safe(f"Select permission {required_star}"), # nosec
|
||||||
choices=[
|
choices=[
|
||||||
(UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS.value, "View all requests"),
|
|
||||||
(UserPortfolioPermissionChoices.EDIT_REQUESTS.value, "View all requests plus create requests"),
|
|
||||||
("no_access", "No access"),
|
("no_access", "No access"),
|
||||||
|
(UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS.value, "Viewer"),
|
||||||
|
(UserPortfolioPermissionChoices.EDIT_REQUESTS.value, "Creator"),
|
||||||
|
|
||||||
],
|
],
|
||||||
widget=forms.RadioSelect,
|
widget=forms.RadioSelect,
|
||||||
required=False,
|
required=False,
|
||||||
|
@ -165,15 +153,28 @@ class BasePortfolioMemberForm(forms.ModelForm):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
member_permission_member = forms.ChoiceField(
|
||||||
|
label=mark_safe(f"Select permission {required_star}"), # nosec
|
||||||
|
choices=[
|
||||||
|
("no_access", "No access"),
|
||||||
|
(UserPortfolioPermissionChoices.VIEW_MEMBERS.value, "Viewer"),
|
||||||
|
],
|
||||||
|
widget=forms.RadioSelect,
|
||||||
|
required=False,
|
||||||
|
error_messages={
|
||||||
|
"required": "Admin member permission is required",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Tracks what form elements are required for a given role choice.
|
# Tracks what form elements are required for a given role choice.
|
||||||
# All of the fields included here have "required=False" by default as they are conditionally required.
|
# All of the fields included here have "required=False" by default as they are conditionally required.
|
||||||
# see def clean() for more details.
|
# see def clean() for more details.
|
||||||
ROLE_REQUIRED_FIELDS = {
|
ROLE_REQUIRED_FIELDS = {
|
||||||
UserPortfolioRoleChoices.ORGANIZATION_ADMIN: [
|
UserPortfolioRoleChoices.ORGANIZATION_ADMIN: [],
|
||||||
"domain_request_permission_admin",
|
|
||||||
"member_permission_admin",
|
|
||||||
],
|
|
||||||
UserPortfolioRoleChoices.ORGANIZATION_MEMBER: [
|
UserPortfolioRoleChoices.ORGANIZATION_MEMBER: [
|
||||||
|
"domain_permission_member",
|
||||||
|
"member_permission_member",
|
||||||
"domain_request_permission_member",
|
"domain_request_permission_member",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@ -225,6 +226,10 @@ class BasePortfolioMemberForm(forms.ModelForm):
|
||||||
if cleaned_data.get("domain_request_permission_member") == "no_access":
|
if cleaned_data.get("domain_request_permission_member") == "no_access":
|
||||||
cleaned_data["domain_request_permission_member"] = None
|
cleaned_data["domain_request_permission_member"] = None
|
||||||
|
|
||||||
|
# Edgecase: Member uses a special form value for None called "no_access".
|
||||||
|
if cleaned_data.get("member_permission_member") == "no_access":
|
||||||
|
cleaned_data["member_permission_member"] = None
|
||||||
|
|
||||||
# Handle roles
|
# Handle roles
|
||||||
cleaned_data["roles"] = [role]
|
cleaned_data["roles"] = [role]
|
||||||
|
|
||||||
|
@ -267,12 +272,15 @@ class BasePortfolioMemberForm(forms.ModelForm):
|
||||||
UserPortfolioRoleChoices.ORGANIZATION_ADMIN,
|
UserPortfolioRoleChoices.ORGANIZATION_ADMIN,
|
||||||
UserPortfolioRoleChoices.ORGANIZATION_MEMBER,
|
UserPortfolioRoleChoices.ORGANIZATION_MEMBER,
|
||||||
]
|
]
|
||||||
domain_perms = [
|
domain_request_perms = [
|
||||||
UserPortfolioPermissionChoices.EDIT_REQUESTS,
|
UserPortfolioPermissionChoices.EDIT_REQUESTS,
|
||||||
UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS,
|
UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS,
|
||||||
]
|
]
|
||||||
|
domain_perms = [
|
||||||
|
UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS,
|
||||||
|
UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS,
|
||||||
|
]
|
||||||
member_perms = [
|
member_perms = [
|
||||||
UserPortfolioPermissionChoices.EDIT_MEMBERS,
|
|
||||||
UserPortfolioPermissionChoices.VIEW_MEMBERS,
|
UserPortfolioPermissionChoices.VIEW_MEMBERS,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -282,16 +290,15 @@ class BasePortfolioMemberForm(forms.ModelForm):
|
||||||
roles = self.instance.roles or []
|
roles = self.instance.roles or []
|
||||||
selected_role = next((role for role in roles if role in roles), None)
|
selected_role = next((role for role in roles if role in roles), None)
|
||||||
self.initial["role"] = selected_role
|
self.initial["role"] = selected_role
|
||||||
is_admin = selected_role == UserPortfolioRoleChoices.ORGANIZATION_ADMIN
|
is_member = selected_role == UserPortfolioRoleChoices.ORGANIZATION_MEMBER
|
||||||
if is_admin:
|
if is_member:
|
||||||
selected_domain_permission = next((perm for perm in domain_perms if perm in perms), None)
|
# Edgecase: Member and domain request use a special form value for None called "no_access". This ensures a form selection.
|
||||||
selected_member_permission = next((perm for perm in member_perms if perm in perms), None)
|
selected_domain_permission = next((perm for perm in domain_perms if perm in perms), UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS.value)
|
||||||
self.initial["domain_request_permission_admin"] = selected_domain_permission
|
selected_domain_request_permission = next((perm for perm in domain_request_perms if perm in perms), "no_access")
|
||||||
self.initial["member_permission_admin"] = selected_member_permission
|
selected_member_permission = next((perm for perm in member_perms if perm in perms), "no_access")
|
||||||
else:
|
self.initial["domain_request_permission_member"] = selected_domain_request_permission
|
||||||
# Edgecase: Member uses a special form value for None called "no_access". This ensures a form selection.
|
self.initial["domain_permission_member"] = selected_domain_permission
|
||||||
selected_domain_permission = next((perm for perm in domain_perms if perm in perms), "no_access")
|
self.initial["member_permission_member"] = selected_member_permission
|
||||||
self.initial["domain_request_permission_member"] = selected_domain_permission
|
|
||||||
|
|
||||||
|
|
||||||
class PortfolioMemberForm(BasePortfolioMemberForm):
|
class PortfolioMemberForm(BasePortfolioMemberForm):
|
||||||
|
|
|
@ -21,10 +21,11 @@ class UserPortfolioPermission(TimeStampedModel):
|
||||||
UserPortfolioRoleChoices.ORGANIZATION_ADMIN: [
|
UserPortfolioRoleChoices.ORGANIZATION_ADMIN: [
|
||||||
UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS,
|
UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS,
|
||||||
UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS,
|
UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS,
|
||||||
|
UserPortfolioPermissionChoices.EDIT_REQUESTS,
|
||||||
UserPortfolioPermissionChoices.VIEW_MEMBERS,
|
UserPortfolioPermissionChoices.VIEW_MEMBERS,
|
||||||
|
UserPortfolioPermissionChoices.EDIT_MEMBERS,
|
||||||
UserPortfolioPermissionChoices.VIEW_PORTFOLIO,
|
UserPortfolioPermissionChoices.VIEW_PORTFOLIO,
|
||||||
UserPortfolioPermissionChoices.EDIT_PORTFOLIO,
|
UserPortfolioPermissionChoices.EDIT_PORTFOLIO,
|
||||||
# Domain: field specific permissions
|
|
||||||
UserPortfolioPermissionChoices.VIEW_SUBORGANIZATION,
|
UserPortfolioPermissionChoices.VIEW_SUBORGANIZATION,
|
||||||
UserPortfolioPermissionChoices.EDIT_SUBORGANIZATION,
|
UserPortfolioPermissionChoices.EDIT_SUBORGANIZATION,
|
||||||
],
|
],
|
||||||
|
@ -38,9 +39,9 @@ class UserPortfolioPermission(TimeStampedModel):
|
||||||
# Used to throw a ValidationError on clean() for UserPortfolioPermission and PortfolioInvitation.
|
# Used to throw a ValidationError on clean() for UserPortfolioPermission and PortfolioInvitation.
|
||||||
FORBIDDEN_PORTFOLIO_ROLE_PERMISSIONS = {
|
FORBIDDEN_PORTFOLIO_ROLE_PERMISSIONS = {
|
||||||
UserPortfolioRoleChoices.ORGANIZATION_MEMBER: [
|
UserPortfolioRoleChoices.ORGANIZATION_MEMBER: [
|
||||||
UserPortfolioPermissionChoices.VIEW_MEMBERS,
|
UserPortfolioPermissionChoices.EDIT_PORTFOLIO,
|
||||||
UserPortfolioPermissionChoices.EDIT_MEMBERS,
|
UserPortfolioPermissionChoices.EDIT_MEMBERS,
|
||||||
UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS,
|
UserPortfolioPermissionChoices.EDIT_SUBORGANIZATION,
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,23 +92,6 @@
|
||||||
|
|
||||||
<!-- Admin access form -->
|
<!-- Admin access form -->
|
||||||
<div id="member-admin-permissions" class="margin-top-2">
|
<div id="member-admin-permissions" class="margin-top-2">
|
||||||
<h2>Admin access permissions</h2>
|
|
||||||
<p>Member permissions available for admin-level acccess.</p>
|
|
||||||
|
|
||||||
<h3 class="summary-item__title
|
|
||||||
text-primary-dark
|
|
||||||
margin-bottom-0">Organization domain requests</h3>
|
|
||||||
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
|
||||||
{% input_with_errors form.domain_request_permission_admin %}
|
|
||||||
{% endwith %}
|
|
||||||
|
|
||||||
<h3 class="summary-item__title
|
|
||||||
text-primary-dark
|
|
||||||
margin-bottom-0
|
|
||||||
margin-top-3">Organization members</h3>
|
|
||||||
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
|
||||||
{% input_with_errors form.member_permission_admin %}
|
|
||||||
{% endwith %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Basic access form -->
|
<!-- Basic access form -->
|
||||||
|
@ -116,10 +99,27 @@
|
||||||
<h2>Basic member permissions</h2>
|
<h2>Basic member permissions</h2>
|
||||||
<p>Member permissions available for basic-level acccess.</p>
|
<p>Member permissions available for basic-level acccess.</p>
|
||||||
|
|
||||||
<h3 class="margin-bottom-0 summary-item__title text-primary-dark">Organization domain requests</h3>
|
<h3 class="summary-item__title
|
||||||
|
text-primary-dark
|
||||||
|
margin-bottom-0">Domains</h3>
|
||||||
|
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
||||||
|
{% input_with_errors form.domain_permission_member %}
|
||||||
|
{% endwith %}
|
||||||
|
|
||||||
|
<h3 class="margin-bottom-0
|
||||||
|
summary-item__title
|
||||||
|
text-primary-dark">Domain requests</h3>
|
||||||
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
||||||
{% input_with_errors form.domain_request_permission_member %}
|
{% input_with_errors form.domain_request_permission_member %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
||||||
|
<h3 class="summary-item__title
|
||||||
|
text-primary-dark
|
||||||
|
margin-bottom-0">Organization members</h3>
|
||||||
|
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
||||||
|
{% input_with_errors form.member_permission_member %}
|
||||||
|
{% endwith %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Submit/cancel buttons -->
|
<!-- Submit/cancel buttons -->
|
||||||
|
|
|
@ -65,23 +65,6 @@
|
||||||
|
|
||||||
<!-- Admin access form -->
|
<!-- Admin access form -->
|
||||||
<div id="new-member-admin-permissions" class="margin-top-2">
|
<div id="new-member-admin-permissions" class="margin-top-2">
|
||||||
<h2>Admin access permissions</h2>
|
|
||||||
<p>Member permissions available for admin-level acccess.</p>
|
|
||||||
|
|
||||||
<h3 class="summary-item__title
|
|
||||||
text-primary-dark
|
|
||||||
margin-bottom-0">Organization domain requests</h3>
|
|
||||||
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
|
||||||
{% input_with_errors form.domain_request_permission_admin %}
|
|
||||||
{% endwith %}
|
|
||||||
|
|
||||||
<h3 class="summary-item__title
|
|
||||||
text-primary-dark
|
|
||||||
margin-bottom-0
|
|
||||||
margin-top-3">Organization members</h3>
|
|
||||||
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
|
||||||
{% input_with_errors form.member_permission_admin %}
|
|
||||||
{% endwith %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Basic access form -->
|
<!-- Basic access form -->
|
||||||
|
@ -89,10 +72,27 @@
|
||||||
<h2>Basic member permissions</h2>
|
<h2>Basic member permissions</h2>
|
||||||
<p>Member permissions available for basic-level acccess.</p>
|
<p>Member permissions available for basic-level acccess.</p>
|
||||||
|
|
||||||
<h3 class="margin-bottom-0">Organization domain requests</h3>
|
<h3 class="summary-item__title
|
||||||
|
text-primary-dark
|
||||||
|
margin-bottom-0">Domains</h3>
|
||||||
|
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
||||||
|
{% input_with_errors form.domain_permission_member %}
|
||||||
|
{% endwith %}
|
||||||
|
|
||||||
|
<h3 class="margin-bottom-0
|
||||||
|
summary-item__title
|
||||||
|
text-primary-dark">Domain requests</h3>
|
||||||
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
||||||
{% input_with_errors form.domain_request_permission_member %}
|
{% input_with_errors form.domain_request_permission_member %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
||||||
|
<h3 class="summary-item__title
|
||||||
|
text-primary-dark
|
||||||
|
margin-bottom-0
|
||||||
|
margin-top-3">Organization members</h3>
|
||||||
|
{% with group_classes="usa-form-editable usa-form-editable--no-border bg-gray-1 padding-top-0" %}
|
||||||
|
{% input_with_errors form.member_permission_member %}
|
||||||
|
{% endwith %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Submit/cancel buttons -->
|
<!-- Submit/cancel buttons -->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue