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: if additional_permissions:
portfolio_permissions.update(additional_permissions) portfolio_permissions.update(additional_permissions)
return list(portfolio_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): 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."""

View file

@ -10,7 +10,6 @@ from registrar.models import (
DomainInformation, DomainInformation,
PublicContact, PublicContact,
UserDomainRole, UserDomainRole,
PortfolioInvitation,
) )
from django.db.models import Case, CharField, Count, DateField, F, ManyToManyField, Q, QuerySet, Value, When, TextField, OuterRef, Subquery 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 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.user_portfolio_permission import UserPortfolioPermission
from registrar.models.utility.generic_helper import convert_queryset_to_dict from registrar.models.utility.generic_helper import convert_queryset_to_dict
from registrar.models.utility.orm_helper import ArrayRemove 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.templatetags.custom_filters import get_region
from registrar.utility.constants import BranchChoices from registrar.utility.constants import BranchChoices
from registrar.utility.enums import DefaultEmail 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. Given a set of columns and a model dictionary, generate a new row from cleaned column data.
Must be implemented by subclasses Must be implemented by subclasses
""" """
roles = model.get("roles")
is_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN in (model.get("roles") or []) additional_permissions = model.get("additional_permissions_display")
# Tracks if they can view, create requests, or not do anything is_admin = UserPortfolioRoleChoices.ORGANIZATION_ADMIN in (roles or [])
x = model.get("roles") domain_request_display = UserPortfolioPermission.get_domain_request_permission_display(roles, additional_permissions)
print(f"what are the roles? {x}") member_perm_display = UserPortfolioPermission.get_member_permission_display(roles, additional_permissions)
domain_request_user_permission = None
user_managed_domains = model.get("domain_info", []) user_managed_domains = model.get("domain_info", [])
managed_domains_as_csv = ",".join(user_managed_domains) 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 = { FIELDS = {
"Email": model.get("email_display"), "Email": model.get("email_display"),
"Organization admin": is_admin, "Organization admin": is_admin,
"Invited by": model.get("invited_by"), "Invited by": model.get("invited_by"),
"Invitation date": model.get("invitation_date"), "Invitation date": model.get("invitation_date"),
"Last active": model.get("last_active"), "Last active": model.get("last_active"),
"Domain requests": "TODO", "Domain requests": domain_request_display,
"Member management": "TODO", "Member management": member_perm_display,
"Domain management": "TODO", "Domain management": "TODO",
"Number of domains": len(user_managed_domains), "Number of domains": len(user_managed_domains),
# TODO - this doesn't quote enclose with one record # 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. # Tweak the queries slightly to only return the data we need.
# When returning data for the csv report we: # 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' # 2. Return a formatted date for 'last_active'
# These are just optimizations that are better done in SQL as opposed to python. # These are just optimizations that are better done in SQL as opposed to python.
if csv_report: if csv_report: