From 10228fe3ef6093e7c18375067aa161ddb45a2c19 Mon Sep 17 00:00:00 2001
From: Xavier Morel
Date: Fri, 28 Sep 2018 16:32:46 +0200
Subject: [PATCH] [ADD] web: ability to become superuser (uid=1)
* requires that current user has group_system
* only visible in debug mode (?debug)
* available at login or via debug menu
* special systray color in superuser sessions
Closes #27254
---
addons/web/controllers/main.py | 17 ++++++++++++++++-
.../src/js/chrome/abstract_web_client.js | 3 +++
addons/web/static/src/scss/navbar.scss | 19 +++++++++++++++++++
addons/web/static/src/xml/base.xml | 1 +
addons/web/views/webclient_templates.xml | 6 +++++-
5 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 9519dd99476..49ace1f32ed 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -22,6 +22,7 @@ import time
import zlib
import werkzeug
+import werkzeug.exceptions
import werkzeug.utils
import werkzeug.wrappers
import werkzeug.wsgi
@@ -44,7 +45,7 @@ from odoo.http import content_disposition, dispatch_rpc, request, \
serialize_exception as _serialize_exception, Response
from odoo.exceptions import AccessError, UserError, AccessDenied
from odoo.models import check_method_name
-from odoo.service import db
+from odoo.service import db, security
_logger = logging.getLogger(__name__)
@@ -505,11 +506,25 @@ class Home(http.Controller):
if not odoo.tools.config['list_db']:
values['disable_database_manager'] = True
+ # otherwise no real way to test debug mode in template as ?debug =>
+ # values['debug'] = '' but that's also the fallback value when
+ # missing variables in qweb
+ if 'debug' in values:
+ values['debug'] = True
+
response = request.render('web.login', values)
response.headers['X-Frame-Options'] = 'DENY'
return response
+ @http.route('/web/become', type='http', auth='user', sitemap=False)
+ def switch_to_admin(self):
+ uid = request.env.user.id
+ if request.env.user._is_system():
+ uid = request.session.uid = odoo.SUPERUSER_ID
+ request.env['res.users']._invalidate_session_cache()
+ request.session.session_token = security.compute_session_token(request.session, request.env)
+ return http.redirect_with_hash(self._login_redirect(uid))
class WebClient(http.Controller):
diff --git a/addons/web/static/src/js/chrome/abstract_web_client.js b/addons/web/static/src/js/chrome/abstract_web_client.js
index d23bbeb237f..80711fd24ed 100644
--- a/addons/web/static/src/js/chrome/abstract_web_client.js
+++ b/addons/web/static/src/js/chrome/abstract_web_client.js
@@ -132,6 +132,9 @@ var AbstractWebClient = Widget.extend(ServiceProviderMixin, KeyboardNavigationMi
self.action_manager.$el.on('scroll', core.bus.trigger.bind(core.bus, 'scroll'));
core.bus.trigger('web_client_ready');
odoo.isReady = true;
+ if (session.uid === 1) {
+ self.$el.addClass('o_is_superuser');
+ }
});
},
diff --git a/addons/web/static/src/scss/navbar.scss b/addons/web/static/src/scss/navbar.scss
index 160a1b87558..367a374812d 100644
--- a/addons/web/static/src/scss/navbar.scss
+++ b/addons/web/static/src/scss/navbar.scss
@@ -1,4 +1,23 @@
+body.o_is_superuser .o_menu_systray {
+ background: repeating-linear-gradient(
+ 135deg,
+ #d9b904, #d9b904 10px,
+ #373435 10px, #373435 20px
+ );
+ border-bottom-left-radius: 20px;
+ > li {
+ > a, > label {
+ &:hover {
+ background-color: fade_out($o-navbar-inverse-link-hover-bg, 0.5);
+ }
+ }
+ }
+
+ .show .dropdown-toggle {
+ background-color: fade_out($o-navbar-inverse-link-hover-bg, 0.5);
+ }
+}
.o_main_navbar {
position: relative;
height: $o-navbar-height;
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index a37645ba85e..907a02c0237 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -247,6 +247,7 @@
Activate Assets Debugging
Regenerate Assets Bundles
+ Become Superuser
Leave the Developer Tools
diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml
index 339f52e9de7..fb5a70290a0 100644
--- a/addons/web/views/webclient_templates.xml
+++ b/addons/web/views/webclient_templates.xml
@@ -409,11 +409,15 @@
-
+
+
+
+
+