docs: def process_view(self, request, view_func, view_args, view_kwargs):
          """
          Forwards unauthenticated requests to the admin page to the CAS
          login URL, as well as calls to django.contrib.auth.views.login and
          logout.
          """
  
          if view_func == login:
              return cas_login(request, *view_args, **view_kwargs)
          elif view_func == logout:
              return cas_logout(request, *view_args, **view_kwargs)
  
          if settings.CAS_ADMIN_PREFIX:
              if not request.path.startswith(settings.CAS_ADMIN_PREFIX):
                  return None
          elif not view_func.__module__.startswith('django.contrib.admin.'):
              return None
  
          try:
              # use callable for pre-django 2.0
              is_authenticated = request.user.is_authenticated()
          except TypeError:
              is_authenticated = request.user.is_authenticated
  
          if is_authenticated:
              if request.user.is_staff:
                  return None
              else:
                  error = ('<h1>Forbidden</h1><p>You do not have staff '
                           'privileges.</p>')
                  return HttpResponseForbidden(error)
  
          params = urlencode({REDIRECT_FIELD_NAME: request.get_full_path()})
          return HttpResponseRedirect(reverse(cas_login) + '?' + params)