From 6cf1d9265a1beb0da23bf61f45476915aa8610f2 Mon Sep 17 00:00:00 2001
From: Brandon Rodriguez <brodriguez8774@gmail.com>
Date: Mon, 10 Feb 2025 17:36:43 -0500
Subject: [PATCH] Semi-working fix, with race condition

---
 adminlte2_pdq/admin_menu.py                   |    34 +-
 adminlte2_pdq/middleware.py                   |    23 +-
 adminlte2_pdq/mixins.py                       |    44 +-
 adminlte2_pdq/templatetags/sidebar_menu.py    |   127 +
 .../tests/test_templatetags/__init__.py       |     0
 .../test_templatetags/test_sidebar_menu.py    |   380 +-
 .../test_sidebar_menu_node_fallback.py        | 14931 ++++++++++++++++
 7 files changed, 15358 insertions(+), 181 deletions(-)
 create mode 100644 tests/django_adminlte2_pdq/tests/test_templatetags/__init__.py
 create mode 100644 tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py

diff --git a/adminlte2_pdq/admin_menu.py b/adminlte2_pdq/admin_menu.py
index 4590649..6776548 100644
--- a/adminlte2_pdq/admin_menu.py
+++ b/adminlte2_pdq/admin_menu.py
@@ -21,25 +21,41 @@ class _AdminMenu:
         self.app_icons = {}
 
     def create_menu(self, context):
-        """Create Menu"""
+        """Create menu"""
 
-        app_list = []
+        # print("\n\n\n\n\n\n\n\n=============================\n\n\n\n\n\n\n\n")
+        # print("admin_menu.py create_menu():")
+        # print("    context: {0}".format(context))
+        # print("\n\n\n")
 
+        app_list = []
         all_admin_perms = []
 
+        # print("Checking context...")
         request = context["request"]
 
         if not context.get("available_apps"):
+            # print("No available_apps. New value is")
             context["available_apps"] = site.get_app_list(request)
+            # print("    {0}".format(context["available_apps"]))
 
+        # print("\n\n\n\n")
+        # print("Processing apps...")
         for app in context["available_apps"]:
 
             model_nodes = []
 
+            # print("\n")
+            # print('    Processing app "{0}" models...'.format(app))
             for model in app["models"]:
 
+                # print("")
+                # print('        Processing model "{0}"'.format(model))
+
                 if context["user"].is_staff or context["user"].is_superuser:
 
+                    # print("            Is superuser. Processing extra stuff...")
+
                     # Initialize to none. If the user has a valid url endpoint they
                     # can access from permissions, the url will get a value.
                     url = None
@@ -85,8 +101,14 @@ class _AdminMenu:
 
                         model_nodes.append(model_node)
 
+                # else:
+                #     print("            Is NOT superuser. Skipping extra processing.")
+
             if model_nodes:
 
+                # print("")
+                # print("            Processing model_nodes...")
+
                 app_name = app["name"]
 
                 app_icon = self.get_app_icon(app_name)
@@ -99,6 +121,10 @@ class _AdminMenu:
 
                 app_list.append(tree)
 
+            # else:
+            #     print("")
+            #     print("            Skipping model_nodes processing.")
+
         admin_index = [
             {
                 "route": "admin:index",
@@ -110,6 +136,10 @@ class _AdminMenu:
             }
         ]
 
+        # print("\n\n")
+        # print("Calculated admin_index:")
+        # print("    {0}".format(admin_index))
+
         put_entire_admin_in_tree = getattr(
             settings,
             "ADMINLTE2_ADMIN_MENU_IN_TREE",
diff --git a/adminlte2_pdq/middleware.py b/adminlte2_pdq/middleware.py
index 60fa86f..20aa707 100644
--- a/adminlte2_pdq/middleware.py
+++ b/adminlte2_pdq/middleware.py
@@ -404,6 +404,11 @@ class AuthMiddleware:
     def parse_request_data(self, request):
         """Parses request data and generates dict of calculated values."""
 
+        print("\n\n\n\n")
+        print("parse_request_data():")
+        print("    request: {0}".format(request))
+        print("\n")
+
         # Initialize default data structure.
         # This is our fallback if view is not using AdminLtePdq logic.
         data_dict = {
@@ -433,14 +438,27 @@ class AuthMiddleware:
             data_dict["current_url_name"] = current_url_name
             data_dict["fully_qualified_url_name"] = fully_qualified_url_name
 
+            print("    app_name: {0}".format(app_name))
+            print("    current_url_name: {0}".format(current_url_name))
+            print("    fully_qualified_url_name: {0}".format(fully_qualified_url_name))
+            print("\n")
+
             # Get extra AdminLtePdq data, if available.
             if view_class:
-                # Is class-based view. Get class data dict.
+                # Is class-based view.
+
+                # If class inheriting from AdminLte mixins, then ensure data is up-to-date and fully initialized.
+                if hasattr(view_class, "_update_admin_pdq_data"):
+                    view_class._update_admin_pdq_data()
+
+                # Get AdminLte class data dict.
                 admin_pdq_data = getattr(view_class, "admin_pdq_data", {})
             else:
-                # Is function-based view. Get function data dict.
+                # Is function-based view. Get AdminLte function data dict.
                 admin_pdq_data = getattr(resolver.func, "admin_pdq_data", {})
 
+            print("Data pulled from view decorator/mixin: {0}".format(admin_pdq_data))
+
             # Process data.
             if view_class:
                 # Get class attributes.
@@ -509,6 +527,7 @@ class AuthMiddleware:
                     data_dict["full_permissions"] = admin_pdq_data.get("full_permissions", None)
 
         except Http404:
+            # Request was 404, not valid page.
             data_dict.update({"resolver": None})
 
         # Return parsed data.
diff --git a/adminlte2_pdq/mixins.py b/adminlte2_pdq/mixins.py
index 48cfb8b..be3a836 100644
--- a/adminlte2_pdq/mixins.py
+++ b/adminlte2_pdq/mixins.py
@@ -13,7 +13,43 @@ from django.urls import reverse_lazy
 from .constants import HOME_ROUTE
 
 
-class AllowAnonymousAccessMixin:
+class BaseAdminLteMixin:
+
+    @classmethod
+    def _update_admin_pdq_data(cls):
+        """Helper function to update the data dictionary for AdminLTE data.
+
+        Otherwise, depending on the order of project runtime loading,
+        values may be initialized with only the Mixin defaults, and not
+        actually have the intended values provided on the view class itself.
+        """
+
+        print("\n\n\n\n")
+        print("Updating admin_pdq_data...")
+        print("")
+        print("    Before Update:")
+        if hasattr(cls, "admin_pdq_data"):
+            print("        {0}".format(cls.admin_pdq_data))
+        else:
+            print("        None")
+
+        # Update one_permission_required variable.
+        if hasattr(cls, "permission_required_one"):
+            cls.admin_pdq_data["one_of_permissions"] = cls.permission_required_one
+
+        # Update full_permission_required variable.
+        if hasattr(cls, "permission_required"):
+            cls.admin_pdq_data["full_permissions"] = cls.permission_required
+
+        print("    After Update:")
+        if hasattr(cls, "admin_pdq_data"):
+            print("        {0}".format(cls.admin_pdq_data))
+        else:
+            print("        None")
+        print("\n\n\n\n")
+
+
+class AllowAnonymousAccessMixin(BaseAdminLteMixin):
     """Mixin for strict mode, that defines a view can be accessed without login.
 
     General logic comes from the login_required project decorator.
@@ -40,7 +76,7 @@ class AllowAnonymousAccessMixin:
         cls.subclasses.append(cls.__name__)
 
 
-class LoginRequiredMixin(DjangoLoginRequiredMixin):
+class LoginRequiredMixin(DjangoLoginRequiredMixin, BaseAdminLteMixin):
     """Mixin for views that defines login is required."""
 
     # Pdq data processing dict.
@@ -64,7 +100,7 @@ class LoginRequiredMixin(DjangoLoginRequiredMixin):
         cls.subclasses.append(cls.__name__)
 
 
-class AllowWithoutPermissionsMixin(DjangoLoginRequiredMixin):
+class AllowWithoutPermissionsMixin(DjangoLoginRequiredMixin, BaseAdminLteMixin):
     """Mixin for strict mode, that defines a view which requires login, but no permissions.
 
     General logic comes from the login_required project decorator.
@@ -91,7 +127,7 @@ class AllowWithoutPermissionsMixin(DjangoLoginRequiredMixin):
         cls.subclasses.append(cls.__name__)
 
 
-class PermissionRequiredMixin(DjangoPermissionRequiredMixin):
+class PermissionRequiredMixin(DjangoPermissionRequiredMixin, BaseAdminLteMixin):
     """Mixin for views that defines permissions are required."""
 
     # Values for user to override.
diff --git a/adminlte2_pdq/templatetags/sidebar_menu.py b/adminlte2_pdq/templatetags/sidebar_menu.py
index e6382dd..7fb5bd3 100644
--- a/adminlte2_pdq/templatetags/sidebar_menu.py
+++ b/adminlte2_pdq/templatetags/sidebar_menu.py
@@ -220,13 +220,32 @@ def render_link(context, node):
 def get_permissions_from_view(view):
     """Get the permission/access data from a view."""
 
+    print("\n\n")
+    print("get_permissions_from_view():")
+    print("    view: {0}".format(view))
+    print("")
+
     view_data = {}
     view_class = getattr(view.func, "view_class", None)
+
+    # Get extra AdminLtePdq data, if available.
     if view_class:
+        # Is class-based view.
+
+        # If class inheriting from AdminLte mixins, then ensure data is up-to-date and fully initialized.
+        if hasattr(view_class, "_update_admin_pdq_data"):
+            view_class._update_admin_pdq_data()
+
+        # Get AdminLte class data dict.
         admin_pdq_data = getattr(view_class, "admin_pdq_data", {})
     else:
+        # Is function-based view. Get AdminLte function data dict.
         admin_pdq_data = getattr(view.func, "admin_pdq_data", {})
 
+    print("    view_class: {0}".format(view_class))
+    print("    pdq_data: {0}".format(admin_pdq_data))
+    print("")
+
     view_data["decorator_name"] = admin_pdq_data.get("decorator_name", "")
     view_data["allow_anonymous_access"] = admin_pdq_data.get("allow_anonymous_access", None)
     view_data["login_required"] = admin_pdq_data.get("login_required", None)
@@ -249,6 +268,11 @@ def get_permissions_from_node(node):
     behavior as per project settings. Mostly those defined by STRICT mode and LOGIN_REQUIRED mode.
     """
 
+    print("\n\n\n\n")
+    print("get_permissions_from_node():")
+    print("    node: {0}".format(node))
+    print("\n")
+
     err_str__anonymous_and_login_required = "Cannot allow_anonymous_access and have login_required at the same time."
     err_str__without_perms_and_perms_required = (
         "Cannot allow_without_perms and have permissions required at the same time."
@@ -264,6 +288,13 @@ def get_permissions_from_node(node):
     node_one_of_permissions = node.get("one_of_permissions", None)
     node_full_permissions = node.get("permissions", None)
 
+    print("    node_allow_anonymous_access: {0}".format(node_allow_anonymous_access))
+    print("    node_login_required: {0}".format(node_login_required))
+    print("    node_allow_without_permissions: {0}".format(node_allow_without_permissions))
+    print("    node_one_of_permissions: {0}".format(node_one_of_permissions))
+    print("    node_full_permissions: {0}".format(node_full_permissions))
+    print("\n")
+
     # If any of these are strings, set as iterables.
     if isinstance(node_one_of_permissions, str):
         node_one_of_permissions = (node_one_of_permissions,)
@@ -337,6 +368,13 @@ def get_permissions_from_node(node):
         if isinstance(view_full_permissions, str):
             view_full_permissions = (view_full_permissions,)
 
+    print("    view_allow_anonymous_access: {0}".format(view_allow_anonymous_access))
+    print("    view_login_required: {0}".format(view_login_required))
+    print("    view_allow_without_permissions: {0}".format(view_allow_without_permissions))
+    print("    view_one_of_permissions: {0}".format(view_one_of_permissions))
+    print("    view_full_permissions: {0}".format(view_full_permissions))
+    print("\n")
+
     # Raise errors for configurations that don't make sense for view level.
     # Should handle effectively the same as above node error checks. Just at the view level.
     if view_allow_anonymous_access and view_login_required:
@@ -401,6 +439,14 @@ def get_permissions_from_node(node):
         # Fall back to view value, as long as node allow_without_permissions is not set.
         full_permissions = view_full_permissions or []
 
+    print("    allow_anonymous_access: {0}".format(allow_anonymous_access))
+    print("    login_required: {0}".format(login_required))
+    print("    allow_without_permissions: {0}".format(allow_without_permissions))
+    print("    one_of_permissions: {0}".format(one_of_permissions))
+    print("    full_permissions: {0}".format(full_permissions))
+    print("    node_requires_permissions: {0}".format((bool(node_one_of_permissions) or bool(node_full_permissions))))
+    print("\n")
+
     # Return calculated values.
     return {
         "allow_anonymous_access": allow_anonymous_access,
@@ -426,8 +472,23 @@ def is_allowed_node(user, node):
     #   to really make sure this logic is correct.
     """
 
+    print("\n\n\n\n\n\n\n\n")
+    print("===========================================================================")
+    print("===========================================================================")
+    print("===========================================================================")
+    print("\n\n\n\n\n\n\n\n")
+    print("is_allowed_node():")
+    print("    user: {0}".format(user))
+    print("    node: {0}".format(node))
+    print("")
+    print("    LOGIN_REQUIRED: {0}".format(LOGIN_REQUIRED))
+    print("    STRICT MODE:    {0}".format(STRICT_POLICY))
+
     # Always allow superuser.
     if user.is_superuser:
+
+        print("\n\nis_allowed_node(): SUPERUSER TRUE")
+
         return True
 
     # Start allowed as the opposite of the authentication policy.
@@ -438,6 +499,11 @@ def is_allowed_node(user, node):
 
     # Get the permission/access values from the node or node's view.
     return_data = get_permissions_from_node(node)
+
+    print("\n")
+    print("node permissions:")
+    print("    {0}".format(return_data))
+
     allow_anonymous_access = return_data["allow_anonymous_access"]
     login_required = return_data["login_required"]
     allow_without_permissions = return_data["allow_without_permissions"]
@@ -446,24 +512,43 @@ def is_allowed_node(user, node):
     # Special case for handling a view in STRICT POLICY WHITELIST but the node says permission is required.
     node_requires_permissions = return_data["node_requires_permissions"]
 
+    print("\n")
+    print("Determining final node access state, against user {0}".format(user))
+    print("    user.perms: {0}".format(user.user_permissions.all()))
+    print("    user.groups: {0}".format(user.groups.all()))
+    print("")
+    print("    Default States:")
+    print("        passes_login_check:       {0}".format(passes_login_check))
+    print("        passes_permission_check:  {0}".format(passes_permission_check))
+    print("\n")
     # If node allows anonymous, then anyone can access, regardless of any other settings.
     if allow_anonymous_access:
+
+        print("    Handling for AllowAnonymous node logic.")
+
         passes_login_check = True
         passes_permission_check = True
     # If the node requires being logged in, or the login required middleware is active.
     elif login_required or LOGIN_REQUIRED:
+        print("    Handling for LoginRequired node logic")
+        print("        user.is_authenticated: {0}".format(user.is_authenticated))
+        print("        check_for_login_whitelisted_node:")
+        print("")
         # Some iteration of login is required.
         # Verify user is authenticated or the route for the node is whitelisted in the login exempt whitelist.
         passes_login_check = user.is_authenticated or check_for_login_whitelisted_node(node)
 
     # If node allows without permissions, then all users pass permission checks.
     if allow_without_permissions:
+        print("    Handling for AllowWithoutPermissions node logic")
         passes_permission_check = True
     # Check if view is in permission whitelist, so long as node doesn't specify permissions required.
     elif not node_requires_permissions and check_for_strict_whitelisted_node(node):
+        print("    Handling for PermsRequired (whitelisted) node logic")
         passes_permission_check = True
     # Otherwise if any permission values exist, user needs to pass a permission check.
     elif one_of_permissions or full_permissions:
+        print("    Handling for PermsRequired node logic")
 
         # TODO: I'm so tired, I suspect I messed this logic up?
         #   Verify permission-access node tests when more rested.
@@ -494,6 +579,11 @@ def is_allowed_node(user, node):
         # Final result is the combination of these two.
         passes_permission_check = passes_one_check and passes_all_check
 
+    print("\n")
+    print("Final Results:")
+    print("    passes_login_check: {0}".format(passes_login_check))
+    print("    passes_permission_check: {0}".format(passes_permission_check))
+
     # Return true if passes both types of checks. False otherwise.
     return passes_login_check and passes_permission_check
 
@@ -513,6 +603,9 @@ def check_for_one_permission(user, permissions):
 
     # Superusers get all permissions
     if user.is_superuser:
+
+        print("\n\ncheck_for_one_permission(): SUPERUSER TRUE")
+
         return True
 
     allowed = False
@@ -525,6 +618,8 @@ def check_for_one_permission(user, permissions):
                 allowed = True
                 break
 
+    print("\n\ncheck_for_one_permission(): {0}".format(allowed))
+
     return allowed
 
 
@@ -543,6 +638,9 @@ def check_for_all_permissions(user, permissions):
 
     # Superusers get all permissions
     if user.is_superuser:
+
+        print("\n\ncheck_for_all_permissions(): SUPERUSER TRUE")
+
         return True
 
     allowed = False
@@ -554,6 +652,8 @@ def check_for_all_permissions(user, permissions):
         if not user.has_perms(permissions):
             allowed = False
 
+    print("\n\ncheck_for_all_permissions(): {0}".format(allowed))
+
     return allowed
 
 
@@ -562,6 +662,9 @@ def check_for_one_permission_in_node_list(user, nodes):
 
     # Superusers get all permissions
     if user.is_superuser:
+
+        print("\n\ncheck_for_one_permission_in_node_list(): SUPERUSER TRUE")
+
         return True
 
     allowed = False
@@ -580,16 +683,40 @@ def check_for_one_permission_in_node_list(user, nodes):
                     allowed = True
                     break
 
+    print("\n\ncheck_for_one_permission_in_node_list(): {0}".format(allowed))
+
     return allowed
 
 
 def check_for_login_whitelisted_node(node):
     """Check to see if the route property on the node is in the login whitelist"""
+
+    print("")
+    print("")
+    print("        check_for_login_whitelisted_node():")
+    print('            node_route: "{0}"'.format(node.get("route")))
+    print("")
+    print("            LOGIN_EXEMPT_WHITELIST: {0}".format(LOGIN_EXEMPT_WHITELIST))
+    print("")
+    print("            node is whitelisted: {0}".format(node.get("route") in LOGIN_EXEMPT_WHITELIST))
+    print("")
+
     return node.get("route") in LOGIN_EXEMPT_WHITELIST
 
 
 def check_for_strict_whitelisted_node(node):
     """Check to see if the route property on the node is in the whitelist"""
+
+    print("")
+    print("")
+    print("        check_for_login_whitelisted_node():")
+    print('            node_route: "{0}"'.format(node.get("route")))
+    print("")
+    print("            STRICT_POLICY_WHITELIST: {0}".format(STRICT_POLICY_WHITELIST))
+    print("")
+    print("            node is whitelisted: {0}".format(node.get("route") in STRICT_POLICY_WHITELIST))
+    print("")
+
     return node.get("route") in STRICT_POLICY_WHITELIST
 
 
diff --git a/tests/django_adminlte2_pdq/tests/test_templatetags/__init__.py b/tests/django_adminlte2_pdq/tests/test_templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py
index 8dc15d5..7f52ac6 100644
--- a/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py
+++ b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py
@@ -107,17 +107,20 @@ class TemplateTagSidebarMenuBaseTestCase(TestCase):
         """Set up anonymous user"""
         self.anonymous_user = AnonymousUser()
 
-    def _setup_user(self, permissions=None):
+    def _setup_user(self, permissions=None, groups=None):
         """Set up basic user"""
 
         # Remove user if already exists.
+        # Ensures no potential overlap between subtests.
         if self.user:
             self.user.delete()
 
+        # Create basic user.
         self.user = UserModel()
         self.user.username = "test_user"
         self.user.save()
 
+        # Handle if perms provided.
         if permissions:
             if isinstance(permissions, str):
                 permissions = [permissions]
@@ -126,19 +129,34 @@ class TemplateTagSidebarMenuBaseTestCase(TestCase):
                     codename__exact=permission,
                 ).first()
                 self.user.user_permissions.add(perm_object)
+                self.user.save()
+
+        # Handle if groups provided.
+        if groups:
+            if isinstance(groups, str):
+                groups = [groups]
+            for group in groups:
+                group_object = Group.objects.filter(
+                    name=group,
+                ).first()
+                self.user.groups.add(group_object)
+                self.user.save()
 
-    def _setup_staff_user(self, permissions=None):
+    def _setup_staff_user(self, permissions=None, groups=None):
         """Set up Staff user"""
 
         # Remove user if already exists.
+        # Ensures no potential overlap between subtests.
         if self.staff_user:
             self.staff_user.delete()
 
+        # Create basic staff user.
         self.staff_user = UserModel()
         self.staff_user.username = "test_staff_user"
         self.staff_user.is_staff = True
         self.staff_user.save()
 
+        # Handle if perms provided.
         if permissions:
             if isinstance(permissions, str):
                 permissions = [permissions]
@@ -147,9 +165,23 @@ class TemplateTagSidebarMenuBaseTestCase(TestCase):
                     codename__exact=permission,
                 ).first()
                 self.staff_user.user_permissions.add(perm_object)
+                self.staff_user.save()
+
+        # Handle if groups provided.
+        if groups:
+            if isinstance(groups, str):
+                groups = [groups]
+            for group in groups:
+                group_object = Group.objects.filter(
+                    name=group,
+                ).first()
+                self.staff_user.groups.add(group_object)
+                self.staff_user.save()
 
     def _setup_super_user(self):
         """Set up Superuser"""
+
+        # Create basic superuser.
         self.super_user = UserModel()
         self.super_user.username = "test_super_user"
         self.super_user.is_superuser = True
@@ -1883,7 +1915,9 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     # region Loose Mode, Standard Settings
 
     def test__standard__node_minimal(self):
-        """"""
+        """Tests for node with no auth requirements defined on a basic no-auth view.
+        Aka, the "standard" case.
+        """
 
         # Node used for all subtests.
         node = {
@@ -1910,7 +1944,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -1918,7 +1952,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -1934,7 +1968,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -1942,7 +1976,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -1991,7 +2025,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -1999,7 +2033,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2015,7 +2049,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2023,7 +2057,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2071,7 +2105,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2079,7 +2113,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2095,7 +2129,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2103,7 +2137,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2155,7 +2189,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2163,7 +2197,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2179,7 +2213,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2187,7 +2221,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2235,7 +2269,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2243,7 +2277,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2259,7 +2293,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2267,7 +2301,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2316,7 +2350,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2324,7 +2358,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2340,7 +2374,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2348,7 +2382,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2401,7 +2435,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2409,7 +2443,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2425,7 +2459,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2433,7 +2467,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2485,7 +2519,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2493,7 +2527,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2509,7 +2543,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2517,7 +2551,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2567,7 +2601,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2575,7 +2609,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2591,7 +2625,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2599,7 +2633,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2649,7 +2683,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2657,7 +2691,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2673,7 +2707,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2681,7 +2715,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2731,7 +2765,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2739,7 +2773,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2755,7 +2789,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2763,7 +2797,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2813,7 +2847,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2821,7 +2855,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2837,7 +2871,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2845,7 +2879,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2899,7 +2933,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2907,7 +2941,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2923,7 +2957,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2931,7 +2965,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -2983,7 +3017,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -2991,7 +3025,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3007,7 +3041,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3015,7 +3049,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3065,7 +3099,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3073,7 +3107,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3089,7 +3123,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3097,7 +3131,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3146,7 +3180,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3154,7 +3188,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3170,7 +3204,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3178,7 +3212,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3227,7 +3261,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3235,7 +3269,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3251,7 +3285,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3259,7 +3293,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3310,7 +3344,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3318,7 +3352,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3334,7 +3368,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3342,7 +3376,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3396,7 +3430,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3404,7 +3438,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3420,7 +3454,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3428,7 +3462,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3478,7 +3512,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3486,7 +3520,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3502,7 +3536,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3510,7 +3544,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3560,7 +3594,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3568,7 +3602,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3584,7 +3618,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3592,7 +3626,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3643,7 +3677,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3651,7 +3685,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3667,7 +3701,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3675,7 +3709,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3726,7 +3760,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3734,7 +3768,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3750,7 +3784,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3758,7 +3792,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3809,7 +3843,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3817,7 +3851,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3833,7 +3867,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3841,7 +3875,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3903,7 +3937,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo"])
+    #         self._setup_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3911,7 +3945,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo", "change_foo"])
+    #         self._setup_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3927,7 +3961,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo"])
+    #         self._setup_staff_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3935,7 +3969,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo", "change_foo"])
+    #         self._setup_staff_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -3987,7 +4021,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo"])
+    #         self._setup_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -3995,7 +4029,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo", "change_foo"])
+    #         self._setup_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4011,7 +4045,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo"])
+    #         self._setup_staff_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4019,7 +4053,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo", "change_foo"])
+    #         self._setup_staff_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4071,7 +4105,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo"])
+    #         self._setup_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4079,7 +4113,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo", "change_foo"])
+    #         self._setup_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4095,7 +4129,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo"])
+    #         self._setup_staff_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4103,7 +4137,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo", "change_foo"])
+    #         self._setup_staff_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4155,7 +4189,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo"])
+    #         self._setup_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4163,7 +4197,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo", "change_foo"])
+    #         self._setup_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4179,7 +4213,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo"])
+    #         self._setup_staff_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4187,7 +4221,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo", "change_foo"])
+    #         self._setup_staff_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4239,7 +4273,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo"])
+    #         self._setup_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4247,7 +4281,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo", "change_foo"])
+    #         self._setup_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4263,7 +4297,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo"])
+    #         self._setup_staff_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4271,7 +4305,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo", "change_foo"])
+    #         self._setup_staff_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4323,7 +4357,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo"])
+    #         self._setup_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4331,7 +4365,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_user(["add_foo", "change_foo"])
+    #         self._setup_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4347,7 +4381,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with partial permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo"])
+    #         self._setup_staff_user(permissions=["add_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4355,7 +4389,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
     #
     #     with self.subTest("As staff user with full permissions"):
     #         # Get user to run subtest on.
-    #         self._setup_staff_user(["add_foo", "change_foo"])
+    #         self._setup_staff_user(permissions=["add_foo", "change_foo"])
     #
     #         # Test sidebar logic.
     #         allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4410,7 +4444,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4418,7 +4452,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4434,7 +4468,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4442,7 +4476,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4494,7 +4528,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4502,7 +4536,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4518,7 +4552,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4526,7 +4560,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4578,7 +4612,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4586,7 +4620,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4602,7 +4636,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4610,7 +4644,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4662,7 +4696,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4670,7 +4704,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4686,7 +4720,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4694,7 +4728,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4746,7 +4780,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4754,7 +4788,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4770,7 +4804,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4778,7 +4812,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4830,7 +4864,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4838,7 +4872,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4854,7 +4888,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4862,7 +4896,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4910,7 +4944,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with no permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4918,7 +4952,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4926,7 +4960,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -4942,7 +4976,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4950,7 +4984,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -4995,7 +5029,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with no permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5003,7 +5037,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5011,7 +5045,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5027,7 +5061,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5035,7 +5069,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5088,7 +5122,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5096,7 +5130,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5112,7 +5146,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5120,7 +5154,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5173,7 +5207,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5181,7 +5215,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5197,7 +5231,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5205,7 +5239,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5258,7 +5292,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5266,7 +5300,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5282,7 +5316,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5290,7 +5324,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5343,7 +5377,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo"])
+            self._setup_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5351,7 +5385,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As user with full permissions"):
             # Get user to run subtest on.
-            self._setup_user(["add_foo", "change_foo"])
+            self._setup_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.user, node)
@@ -5367,7 +5401,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with partial permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo"])
+            self._setup_staff_user(permissions=["add_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
@@ -5375,7 +5409,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes
 
         with self.subTest("As staff user with full permissions"):
             # Get user to run subtest on.
-            self._setup_staff_user(["add_foo", "change_foo"])
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
 
             # Test sidebar logic.
             allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
diff --git a/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py
new file mode 100644
index 0000000..c4a6232
--- /dev/null
+++ b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py
@@ -0,0 +1,14931 @@
+"""
+Tests for Template Tags
+"""
+
+# System Imports.
+from unittest.mock import patch
+
+# Third-party Imports.
+from django.contrib.auth import get_user_model
+
+# Internal Imports.
+from .test_sidebar_menu import TemplateTagSidebarMenuBaseTestCase
+from adminlte2_pdq.templatetags import sidebar_menu
+
+
+# Module Variables.
+UserModel = get_user_model()
+
+
+class TemplateTagSidebarMenu__ViewFallbackWhenNodeUndefined__Decorators(TemplateTagSidebarMenuBaseTestCase):
+    """Tests the logic for when a node does not have permissions defined,
+    so logic has to fall back to values defined on a function-based (aka decorator) view.
+    """
+
+    FULL_VIEW_WHITELIST = [
+        "adminlte2_pdq:demo-css",
+        "adminlte2_pdq_tests:function-allow-anonymous-access",
+        "adminlte2_pdq_tests:function-login-required",
+        "adminlte2_pdq_tests:function-allow-without-permissions",
+        "adminlte2_pdq_tests:function-one-permission-required",
+        "adminlte2_pdq_tests:function-one-permission-required-as-string",
+        "adminlte2_pdq_tests:function-full-permissions-required",
+        "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+    ]
+
+    # region Loose Mode
+
+    def test__loose_mode__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Loose Mode
+
+    # region LoginRequired Mode, No Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion LoginRequired Mode, No Whitelist
+
+    # region LoginRequired Mode, Login Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion LoginRequired Mode, Login Whitelist
+
+    # region Strict Mode, No Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, No Whitelist
+
+    # region Strict Mode, Login Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, Login Whitelist
+
+    # region Strict Mode, Permission Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, Permission Whitelist
+
+    # region Strict Mode, Both Whitelists
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_no_decorator(self):
+        """Tests for a view with no decorator defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_anonymous_access_decorator(self):
+        """Tests for a view with a AllowAnonymous decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_login_required_decorator(self):
+        """Tests for a node deferring to a view with a LoginRequired decorator."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_allow_without_permissions_decorator(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_one_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_one_permission_required_decorator_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_permission_required_decorator(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_permission_required_decorator__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired decorator."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, Both Whitelists
+
+
+class TemplateTagSidebarMenu__ViewFallbackWhenNodeUndefined__Classes(TemplateTagSidebarMenuBaseTestCase):
+    """Tests the logic for when a node does not have permissions defined,
+    so logic has to fall back to values defined on a class-based (aka mixin) view.
+    """
+
+    FULL_VIEW_WHITELIST = [
+        "adminlte2_pdq:demo-css",
+        "adminlte2_pdq_tests:class-allow-anonymous-access",
+        "adminlte2_pdq_tests:class-login-required",
+        "adminlte2_pdq_tests:class-allow-without-permissions",
+        "adminlte2_pdq_tests:class-one-permission-required",
+        "adminlte2_pdq_tests:class-one-permission-required-as-string",
+        "adminlte2_pdq_tests:class-full-permissions-required",
+        "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+    ]
+
+    # region Loose Mode
+
+    def test__loose_mode__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        # with self.subTest("As anonymous user"):
+        #     # Get user to run subtest on.
+        #     self._setup_anonymous_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+        #     self.assertFalse(allowed)
+
+        # with self.subTest("As user with no permissions"):
+        # Get user to run subtest on.
+        self._setup_user()
+
+        # Test sidebar logic.
+        allowed = sidebar_menu.is_allowed_node(self.user, node)
+        self.assertTrue(allowed)
+
+        # with self.subTest("As user with wrong permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["view_foo", "delete_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with partial permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["add_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with full permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["add_foo", "change_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with wrong permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["view_bar", "delete_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with partial permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["add_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with full permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["add_bar", "change_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with no permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with wrong permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with partial permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["add_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with full permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["add_foo", "change_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with wrong permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["view_bar", "delete_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with partial permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["add_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with full permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["add_bar", "change_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As superuser"):
+        #     # Get user to run subtest on.
+        #     self._setup_super_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+        #     self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    def test__loose_mode__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Loose Mode
+
+    # region LoginRequired Mode, No Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    def test__login_required_mode__no_whitelists__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion LoginRequired Mode, No Whitelist
+
+    # region LoginRequired Mode, Login Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__login_required_mode__with_login_whitelist__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion LoginRequired Mode, Login Whitelist
+
+    # region Strict Mode, No Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        # with self.subTest("As anonymous user"):
+        #     # Get user to run subtest on.
+        #     self._setup_anonymous_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+        #     self.assertTrue(allowed)
+
+        # with self.subTest("As user with no permissions"):
+        # Get user to run subtest on.
+        self._setup_user()
+
+        # Test sidebar logic.
+        allowed = sidebar_menu.is_allowed_node(self.user, node)
+        self.assertTrue(allowed)
+
+        # with self.subTest("As user with wrong permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["view_foo", "delete_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with partial permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["add_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with full permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["add_foo", "change_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with wrong permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["view_bar", "delete_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with partial permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["add_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with full permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["add_bar", "change_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with no permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with wrong permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with partial permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["add_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with full permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["add_foo", "change_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with wrong permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["view_bar", "delete_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with partial permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["add_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with full permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["add_bar", "change_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As superuser"):
+        #     # Get user to run subtest on.
+        #     self._setup_super_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+        #     self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    def test__strict_mode__no_whitelists__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, No Whitelist
+
+    # region Strict Mode, Login Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_login_whitelist__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, Login Whitelist
+
+    # region Strict Mode, Permission Whitelist
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__with_permission_whitelist__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertFalse(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, Permission Whitelist
+
+    # region Strict Mode, Both Whitelists
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_no_mixin(self):
+        """Tests for a view with no mixin defined."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq:demo-css",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_anonymous_access_mixin(self):
+        """Tests for a view with a AllowAnonymous mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-anonymous-access",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_login_required_mixin(self):
+        """Tests for a node deferring to a view with a LoginRequired mixin."""
+
+        # Note: LoginRequired is not valid for STRICT mode.
+        # Behavior is currently undefined, so here we verify behavior is more strict rather than less.
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-login-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_allow_without_permissions_mixin(self):
+        """Tests for a node deferring to a view with a AllowWithoutPermission mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-allow-without-permissions",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        # with self.subTest("As anonymous user"):
+        #     # Get user to run subtest on.
+        #     self._setup_anonymous_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+        #     self.assertTrue(allowed)
+
+        # with self.subTest("As user with no permissions"):
+        # Get user to run subtest on.
+        self._setup_user()
+
+        # Test sidebar logic.
+        allowed = sidebar_menu.is_allowed_node(self.user, node)
+        self.assertTrue(allowed)
+
+        # with self.subTest("As user with wrong permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["view_foo", "delete_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with partial permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["add_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with full permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(permissions=["add_foo", "change_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with wrong permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["view_bar", "delete_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with partial permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["add_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with full permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_user(groups=["add_bar", "change_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with no permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As user with wrong permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with partial permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["add_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with full permissions"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(permissions=["add_foo", "change_foo"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with wrong permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["view_bar", "delete_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with partial permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["add_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As staff user with full permission groups"):
+        #     # Get user to run subtest on.
+        #     self._setup_staff_user(groups=["add_bar", "change_bar"])
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+        #     self.assertTrue(allowed)
+        #
+        # with self.subTest("As superuser"):
+        #     # Get user to run subtest on.
+        #     self._setup_super_user()
+        #
+        #     # Test sidebar logic.
+        #     allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+        #     self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_one_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_one_permission_required_mixin_as_string(self):
+        """Tests for a node deferring to a view with a OnePermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-one-permission-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_permission_required_mixin(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo", "change_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with partial permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar", "change_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST)
+    @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST)
+    def test__strict_mode__both_whitelists__view_with_permission_required_mixin__as_str(self):
+        """Tests for a node deferring to a view with a PermissionRequired mixin."""
+
+        # Node used for all subtests.
+        node = {
+            "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string",
+            "text": "Test Node",
+            "icon": "fa fa-file",
+        }
+
+        with self.subTest("As anonymous user"):
+            # Get user to run subtest on.
+            self._setup_anonymous_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with no permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As user with wrong permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["view_foo", "delete_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permissions"):
+            # Get user to run subtest on.
+            self._setup_staff_user(permissions=["add_foo"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with wrong permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["view_bar", "delete_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As staff user with full permission groups"):
+            # Get user to run subtest on.
+            self._setup_staff_user(groups=["add_bar"])
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.staff_user, node)
+            self.assertTrue(allowed)
+
+        with self.subTest("As superuser"):
+            # Get user to run subtest on.
+            self._setup_super_user()
+
+            # Test sidebar logic.
+            allowed = sidebar_menu.is_allowed_node(self.super_user, node)
+            self.assertTrue(allowed)
+
+    # endregion Strict Mode, Both Whitelists
-- 
GitLab