diff options
| author | Xavier Morel <xmo@odoo.com> | 2018-09-28 16:32:46 +0200 |
|---|---|---|
| committer | Olivier Dony <odo@odoo.com> | 2018-09-28 17:25:36 +0200 |
| commit | 10228fe3ef6093e7c18375067aa161ddb45a2c19 (patch) | |
| tree | 2d3c5288fe43ecf729b0c10d0eed6bdd677d93a8 /addons/web/controllers/main.py | |
| parent | f4bfc9075507e29296d25232461d8b85f9dbcd41 (diff) | |
[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
Diffstat (limited to 'addons/web/controllers/main.py')
| -rw-r--r-- | addons/web/controllers/main.py | 17 |
1 files changed, 16 insertions, 1 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): |
