mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-20 08:24:05 +02:00
add info about roles / perms
This commit is contained in:
parent
b7f3f083fc
commit
174d217315
3 changed files with 36 additions and 13 deletions
|
@ -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."""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue