summaryrefslogtreecommitdiff
path: root/addons/web/controllers/main.py
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2018-09-28 16:32:46 +0200
committerOlivier Dony <odo@odoo.com>2018-09-28 17:25:36 +0200
commit10228fe3ef6093e7c18375067aa161ddb45a2c19 (patch)
tree2d3c5288fe43ecf729b0c10d0eed6bdd677d93a8 /addons/web/controllers/main.py
parentf4bfc9075507e29296d25232461d8b85f9dbcd41 (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.py17
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):