diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 4f220fb59..5008de6b0 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -683,6 +683,9 @@ class MyUserAdmin(BaseUserAdmin, ImportExportModelAdmin): "fields": ( "is_active", "groups", + "portfolio", + "portfolio_roles", + "portfolio_permissions", ) }, ), @@ -712,6 +715,9 @@ class MyUserAdmin(BaseUserAdmin, ImportExportModelAdmin): "Important dates", "last_login", "date_joined", + "portfolio", + "portfolio_roles", + "portfolio_permissions", ] list_filter = ( diff --git a/src/registrar/config/urls.py b/src/registrar/config/urls.py index 2e5a531d1..b91e0980c 100644 --- a/src/registrar/config/urls.py +++ b/src/registrar/config/urls.py @@ -25,7 +25,7 @@ from registrar.views.domain_request import Step from registrar.views.domain_requests_json import get_domain_requests_json from registrar.views.domains_json import get_domains_json from registrar.views.utility import always_404 -from registrar.views.portfolios import portfolio_domains, portfolio_domain_requests +from registrar.views.portfolios import PortfolioDomainsView, PortfolioDomainRequestsView, PortfolioOrganizationView from api.views import available, get_current_federal, get_current_full @@ -61,14 +61,19 @@ urlpatterns = [ path("", views.index, name="home"), path( "portfolio//domains/", - portfolio_domains, + PortfolioDomainsView.as_view(), name="portfolio-domains", ), path( "portfolio//domain_requests/", - portfolio_domain_requests, + PortfolioDomainRequestsView.as_view(), name="portfolio-domain-requests", ), + path( + "portfolio//organization/", + PortfolioOrganizationView.as_view(), + name="portfolio-organization", + ), path( "admin/logout/", RedirectView.as_view(pattern_name="logout", permanent=False), diff --git a/src/registrar/context_processors.py b/src/registrar/context_processors.py index abab72dac..b060d0877 100644 --- a/src/registrar/context_processors.py +++ b/src/registrar/context_processors.py @@ -1,5 +1,7 @@ from django.conf import settings +from registrar.models.user import User + def language_code(request): """Add LANGUAGE_CODE to the template context. @@ -36,3 +38,20 @@ def is_demo_site(request): def is_production(request): """Add a boolean if this is our production site.""" return {"IS_PRODUCTION": settings.IS_PRODUCTION} + + +def has_base_portfolio_permission(request): + """""" + return {"has_base_portfolio_permission": request.user.has_portfolio_permissions(User.UserPortfolioPermissionChoices.VIEW_PORTFOLIO)} + +def has_domains_portfolio_permission(request): + """""" + return {"has_domains_portfolio_permission": request.user.has_portfolio_permissions(User.UserPortfolioPermissionChoices.VIEW_DOMAINS)} + +def has_requests_portfolio_permission(request): + """""" + return {"has_requests_portfolio_permission": request.user.has_portfolio_permissions(User.UserPortfolioPermissionChoices.VIEW_REQUESTS)} + +def has_organization_portfolio_permission(request): + """""" + return {"has_organization_portfolio_permission": request.user.has_portfolio_permissions(User.UserPortfolioPermissionChoices.VIEW_PORTFOLIO)} diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py index 561bdce20..204ead524 100644 --- a/src/registrar/models/user.py +++ b/src/registrar/models/user.py @@ -255,8 +255,12 @@ class User(AbstractUser): def has_portfolio_permissions(self, portfolio_permission): """The views should only call this guy when testing for perms and not rely on roles""" + # TODO: this does not seem to be working if portfolio_permission == self.UserPortfolioPermissionChoices.EDIT_DOMAINS and self.domains.exists(): - return self.domains + print(f'portfolio_permission {portfolio_permission}') + return True + + print(f'portfolio_permission {portfolio_permission}') return portfolio_permission in self.portfolio_permissions if self.portfolio_permissions else False diff --git a/src/registrar/registrar_middleware.py b/src/registrar/registrar_middleware.py index bd7dce19e..d58a3082d 100644 --- a/src/registrar/registrar_middleware.py +++ b/src/registrar/registrar_middleware.py @@ -6,7 +6,7 @@ import logging from urllib.parse import parse_qs from django.urls import reverse from django.http import HttpResponseRedirect -from registrar.models.portfolio import Portfolio +from registrar.context_processors import has_base_portfolio_permission, has_domains_portfolio_permission, has_requests_portfolio_permission from registrar.models.user import User from waffle.decorators import flag_is_active @@ -148,13 +148,19 @@ class CheckPortfolioMiddleware: if request.user.is_authenticated: # user_portfolios = Portfolio.objects.filter(creator=request.user) - required_permission = User.UserPortfolioPermissionChoices.VIEW_PORTFOLIO - - if request.user.has_portfolio_permissions(required_permission): - print('user has portfolio') + if has_base_portfolio_permission(request): + # print('user has portfolio') portfolio = request.user.portfolio - home_with_portfolio = reverse("portfolio-domains", kwargs={"portfolio_id": portfolio.id}) - return HttpResponseRedirect(home_with_portfolio) + + if has_domains_portfolio_permission(request): + portfolio_redirect = reverse("portfolio-domains", kwargs={"portfolio_id": portfolio.id}) + elif has_requests_portfolio_permission(request): + portfolio_redirect = reverse("portfolio-requests", kwargs={"portfolio_id": portfolio.id}) + else: + # View organization is the lowest access + portfolio_redirect = reverse("portfolio-organization", kwargs={"portfolio_id": portfolio.id}) + + return HttpResponseRedirect(portfolio_redirect) - print('user does not have a portfolio') + # print('user does not have a portfolio') return None diff --git a/src/registrar/templates/portfolio_organization.html b/src/registrar/templates/portfolio_organization.html new file mode 100644 index 000000000..74a99ed90 --- /dev/null +++ b/src/registrar/templates/portfolio_organization.html @@ -0,0 +1,8 @@ +{% extends 'portfolio.html' %} + +{% load static %} + +{% block portfolio_content %} +

Organization

+ +{% endblock %} diff --git a/src/registrar/templates/portfolio_sidebar.html b/src/registrar/templates/portfolio_sidebar.html index d02f5ac0c..271bc77c5 100644 --- a/src/registrar/templates/portfolio_sidebar.html +++ b/src/registrar/templates/portfolio_sidebar.html @@ -4,26 +4,31 @@