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 @@