add info about roles / perms

This commit is contained in:
zandercymatics 2024-11-14 13:52:45 -07:00
parent b7f3f083fc
commit 174d217315
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
3 changed files with 36 additions and 13 deletions

View file

@ -115,6 +115,33 @@ class UserPortfolioPermission(TimeStampedModel):
if additional_permissions:
portfolio_permissions.update(additional_permissions)
return list(portfolio_permissions)
@classmethod
def get_domain_request_permission_display(cls, roles, additional_permissions):
"""Class method to return a readable string for domain request permissions"""
# Tracks if they can view, create requests, or not do anything
all_permissions = UserPortfolioPermission.get_portfolio_permissions(roles, additional_permissions)
all_domain_perms = [UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS, UserPortfolioPermissionChoices.EDIT_REQUESTS]
if (all(perm in all_permissions for perm in all_domain_perms)):
return "Viewer Requester"
elif (UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS in all_permissions):
return "Viewer"
else:
return "None"
@classmethod
def get_member_permission_display(cls, roles, additional_permissions):
"""Class method to return a readable string for member permissions"""
# Tracks if they can view, create requests, or not do anything
all_permissions = UserPortfolioPermission.get_portfolio_permissions(roles, additional_permissions)
# Note for reviewers: the reason why this isn't checking on "all" is because
# the way perms work for members is different than requests. We need to consolidate this.
if (UserPortfolioPermissionChoices.EDIT_MEMBERS in all_permissions):
return "Manager"
elif (UserPortfolioPermissionChoices.VIEW_MEMBERS in all_permissions):
return "Viewer"
else:
return "None"
def clean(self):
"""Extends clean method to perform additional validation, which can raise errors in django admin."""

View file

@ -10,7 +10,6 @@ from registrar.models import (
DomainInformation,
PublicContact,
UserDomainRole,
PortfolioInvitation,
)
from django.db.models import Case, CharField, Count, DateField, F, ManyToManyField, Q, QuerySet, Value, When, TextField, OuterRef, Subquery
from django.db.models.functions import Cast
@ -20,7 +19,7 @@ from django.contrib.postgres.aggregates import StringAgg
from registrar.models.user_portfolio_permission import UserPortfolioPermission
from registrar.models.utility.generic_helper import convert_queryset_to_dict
from registrar.models.utility.orm_helper import ArrayRemove
from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices
from registrar.models.utility.portfolio_helper import UserPortfolioRoleChoices, UserPortfolioPermissionChoices
from registrar.templatetags.custom_filters import get_region
from registrar.utility.constants import BranchChoices
from registrar.utility.enums import DefaultEmail
@ -197,24 +196,21 @@ class MemberExport(BaseExport):
Given a set of columns and a model dictionary, generate a new row from cleaned column data.
Must be implemented by subclasses
"""
is_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN in (model.get("roles") or [])
# Tracks if they can view, create requests, or not do anything
x = model.get("roles")
print(f"what are the roles? {x}")
domain_request_user_permission = None
roles = model.get("roles")
additional_permissions = model.get("additional_permissions_display")
is_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN in (roles or [])
domain_request_display = UserPortfolioPermission.get_domain_request_permission_display(roles, additional_permissions)
member_perm_display = UserPortfolioPermission.get_member_permission_display(roles, additional_permissions)
user_managed_domains = model.get("domain_info", [])
managed_domains_as_csv = ",".join(user_managed_domains)
# Whether they can make domain requests. Tentatively, I think the options as we currently understand would be: None, Viewer, Viewer Requester
FIELDS = {
"Email": model.get("email_display"),
"Organization admin": is_admin,
"Invited by": model.get("invited_by"),
"Invitation date": model.get("invitation_date"),
"Last active": model.get("last_active"),
"Domain requests": "TODO",
"Member management": "TODO",
"Domain requests": domain_request_display,
"Member management": member_perm_display,
"Domain management": "TODO",
"Number of domains": len(user_managed_domains),
# TODO - this doesn't quote enclose with one record

View file

@ -241,7 +241,7 @@ class UserPortfolioPermissionModelAnnotation(BaseModelAnnotation):
# Tweak the queries slightly to only return the data we need.
# When returning data for the csv report we:
# 1. Only return the domain name for 'domain_info'
# 1. Only return the domain name for 'domain_info' rather than also add ':' seperated id
# 2. Return a formatted date for 'last_active'
# These are just optimizations that are better done in SQL as opposed to python.
if csv_report: