Răsfoiți Sursa

Merge pull request #7210 from overleaf/jpa-switch-to-admin

[web] add a button for switching to the admin domain from www.

GitOrigin-RevId: 7e14b9c1415ef6cad5f369d77530599bac3148e7
Jakob Ackermann 4 ani în urmă
părinte
comite
4d18dcb377

+ 2 - 2
services/web/app/src/Features/Authorization/AuthorizationMiddleware.js

@@ -8,12 +8,12 @@ const SessionManager = require('../Authentication/SessionManager')
 const TokenAccessHandler = require('../TokenAccess/TokenAccessHandler')
 const { expressify } = require('../../util/promises')
 const {
-  shouldRedirectToAdminDomain,
+  canRedirectToAdminDomain,
 } = require('../Helpers/AdminAuthorizationHelper')
 const { getSafeAdminDomainRedirect } = require('../Helpers/UrlHelper')
 
 function handleAdminDomainRedirect(req, res) {
-  if (shouldRedirectToAdminDomain(SessionManager.getSessionUser(req.session))) {
+  if (canRedirectToAdminDomain(SessionManager.getSessionUser(req.session))) {
     logger.warn({ req }, 'redirecting admin user to admin domain')
     res.redirect(getSafeAdminDomainRedirect(req.originalUrl))
     return true

+ 2 - 2
services/web/app/src/Features/Helpers/AdminAuthorizationHelper.js

@@ -2,7 +2,7 @@ const Settings = require('@overleaf/settings')
 
 module.exports = {
   hasAdminAccess,
-  shouldRedirectToAdminDomain,
+  canRedirectToAdminDomain,
 }
 
 function hasAdminAccess(user) {
@@ -11,7 +11,7 @@ function hasAdminAccess(user) {
   return Boolean(user.isAdmin)
 }
 
-function shouldRedirectToAdminDomain(user) {
+function canRedirectToAdminDomain(user) {
   if (Settings.adminPrivilegeAvailable) return false
   if (!Settings.adminUrl) return false
   if (!user) return false

+ 3 - 0
services/web/app/src/infrastructure/ExpressLocals.js

@@ -13,6 +13,7 @@ const PackageVersions = require('./PackageVersions')
 const Modules = require('./Modules')
 const SafeHTMLSubstitute = require('../Features/Helpers/SafeHTMLSubstitution')
 const {
+  canRedirectToAdminDomain,
   hasAdminAccess,
 } = require('../Features/Helpers/AdminAuthorizationHelper')
 
@@ -302,6 +303,8 @@ module.exports = function (webRouter, privateApiRouter, publicApiRouter) {
     res.locals.getLoggedInUserId = () =>
       SessionManager.getLoggedInUserId(req.session)
     res.locals.getSessionUser = () => SessionManager.getSessionUser(req.session)
+    res.locals.canRedirectToAdminDomain = () =>
+      canRedirectToAdminDomain(SessionManager.getSessionUser(req.session))
     res.locals.hasAdminAccess = () =>
       hasAdminAccess(SessionManager.getSessionUser(req.session))
     next()

+ 5 - 1
services/web/app/views/layout/navbar-marketing.pug

@@ -16,10 +16,11 @@ nav.navbar.navbar-default.navbar-main
 				a(href='/', aria-label=settings.appName).navbar-brand
 
 		- var canDisplayAdminMenu = hasAdminAccess()
+		- var canDisplayAdminRedirect = canRedirectToAdminDomain()
 		- var canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || (getSessionUser() && getSessionUser().staffAccess && (getSessionUser().staffAccess.splitTestMetrics || getSessionUser().staffAccess.splitTestManagement)))
 		.navbar-collapse.collapse(data-ol-navbar-main-collapse)
 			ul.nav.navbar-nav.navbar-right
-				if (canDisplayAdminMenu || canDisplaySplitTestMenu)
+				if (canDisplayAdminMenu || canDisplayAdminRedirect || canDisplaySplitTestMenu)
 					li.dropdown.subdued
 						a.dropdown-toggle(
 							href="#",
@@ -38,6 +39,9 @@ nav.navbar.navbar-default.navbar-main
 									a(href="/admin/user") Manage Users
 								li
 									a(href="/admin/project") Project URL Lookup
+							if canDisplayAdminRedirect
+								li
+									a(href=settings.adminUrl) Switch to Admin
 							if canDisplaySplitTestMenu
 								li
 									a(href="/admin/split-test") Manage Split Tests

+ 5 - 1
services/web/app/views/layout/navbar.pug

@@ -11,10 +11,11 @@ nav.navbar.navbar-default.navbar-main
 				a(href='/', aria-label=settings.appName).navbar-brand
 
 		- var canDisplayAdminMenu = hasAdminAccess()
+		- var canDisplayAdminRedirect = canRedirectToAdminDomain()
 		- var canDisplaySplitTestMenu = hasFeature('saas') && (canDisplayAdminMenu || (getSessionUser() && getSessionUser().staffAccess && (getSessionUser().staffAccess.splitTestMetrics || getSessionUser().staffAccess.splitTestManagement)))
 		.navbar-collapse.collapse(collapse="navCollapsed")
 			ul.nav.navbar-nav.navbar-right
-				if (canDisplayAdminMenu || canDisplaySplitTestMenu)
+				if (canDisplayAdminMenu || canDisplayAdminRedirect || canDisplaySplitTestMenu)
 					li.dropdown(class="subdued", dropdown)
 						a.dropdown-toggle(href, dropdown-toggle)
 							| Admin
@@ -27,6 +28,9 @@ nav.navbar.navbar-default.navbar-main
 									a(href="/admin/user") Manage Users
 								li
 									a(href="/admin/project") Project URL Lookup
+							if canDisplayAdminRedirect
+								li
+									a(href=settings.adminUrl) Switch to Admin
 							if canDisplaySplitTestMenu
 								li
 									a(href="/admin/split-test") Manage Split Tests

+ 1 - 1
services/web/test/unit/src/Authorization/AuthorizationMiddlewareTests.js

@@ -44,7 +44,7 @@ describe('AuthorizationMiddleware', function () {
         '../Authentication/SessionManager': this.SessionManager,
         '../TokenAccess/TokenAccessHandler': this.TokenAccessHandler,
         '../Helpers/AdminAuthorizationHelper': {
-          shouldRedirectToAdminDomain: sinon.stub().returns(false),
+          canRedirectToAdminDomain: sinon.stub().returns(false),
         },
       },
     })