diff --git a/addons/hr/__manifest__.py b/addons/hr/__manifest__.py
index 6180b6ddb88f46db6c841c3465ee6b3341c23a5f..599c49b168ae9471af9e006c97afb6ef57945042 100644
--- a/addons/hr/__manifest__.py
+++ b/addons/hr/__manifest__.py
@@ -70,6 +70,7 @@
         ],
         'web.assets_tests': [
             'hr/static/tests/tours/hr_employee_flow.js',
+            'hr/static/tests/tours/user_modify_own_profile_tour.js',
         ],
     },
     'license': 'LGPL-3',
diff --git a/addons/hr/static/tests/tours/user_modify_own_profile_tour.js b/addons/hr/static/tests/tours/user_modify_own_profile_tour.js
new file mode 100644
index 0000000000000000000000000000000000000000..e88659b0a7b254de9310cbde6adcb9e9e0f14ef0
--- /dev/null
+++ b/addons/hr/static/tests/tours/user_modify_own_profile_tour.js
@@ -0,0 +1,19 @@
+/** @odoo-module **/
+
+import tour from 'web_tour.tour';
+
+/**
+ * As 'hr' changes the flow a bit and displays the user preferences form in a full view instead of
+ * a modal, we adapt the steps of the original tour accordingly.
+ */
+tour.tours['mail/static/tests/tours/user_modify_own_profile_tour.js'].steps = [{
+    content: 'Open user account menu',
+    trigger: '.o_user_menu button',
+}, {
+    content: "Open preferences / profile screen",
+    trigger: '[data-menu=settings]',
+}, {
+    content: "Update the email address",
+    trigger: 'div[name="email"] input',
+    run: 'text updatedemail@example.com',
+}, ...tour.stepUtils.saveForm()];
diff --git a/addons/mail/static/tests/tours/user_modify_own_profile_tour.js b/addons/mail/static/tests/tours/user_modify_own_profile_tour.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b85bbd04cdd261ba32f16ec6842736bc5db8c62
--- /dev/null
+++ b/addons/mail/static/tests/tours/user_modify_own_profile_tour.js
@@ -0,0 +1,26 @@
+/** @odoo-module **/
+
+import tour from 'web_tour.tour';
+
+/**
+ * Verify that a user can modify their own profile information.
+ */
+tour.register('mail/static/tests/tours/user_modify_own_profile_tour.js', {
+    test: true,
+}, [{
+    content: 'Open user account menu',
+    trigger: '.o_user_menu button',
+}, {
+    content: "Open preferences / profile screen",
+    trigger: '[data-menu=settings]',
+}, {
+    content: "Update the email address",
+    trigger: 'div[name="email"] input',
+    run: 'text updatedemail@example.com',
+}, {
+    content: "Save the form",
+    trigger: 'button[name="preference_save"]',
+}, {
+    content: "Wait until the modal is closed",
+    trigger: 'body:not(.modal-open)',
+}]);
diff --git a/addons/mail/tests/__init__.py b/addons/mail/tests/__init__.py
index 4f050f4c3cdbdd652e234805fc52a2ee774389b4..c492546effbe5b585593d3df56316572188218a6 100644
--- a/addons/mail/tests/__init__.py
+++ b/addons/mail/tests/__init__.py
@@ -16,3 +16,4 @@ from . import test_res_users_settings
 from . import test_rtc
 from . import test_uninstall
 from . import test_update_notification
+from . import test_user_modify_own_profile
diff --git a/addons/mail/tests/test_user_modify_own_profile.py b/addons/mail/tests/test_user_modify_own_profile.py
new file mode 100644
index 0000000000000000000000000000000000000000..3477cd9bfa573d9ab86560005df18228a7262da9
--- /dev/null
+++ b/addons/mail/tests/test_user_modify_own_profile.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.tests import HttpCase, tagged
+
+
+@tagged('-at_install', 'post_install')
+class TestUserModifyOwnProfile(HttpCase):
+
+    def test_user_modify_own_profile(self):
+        """" A user should be able to modify their own profile.
+        Even if that user does not have access rights to write on the res.users model. """
+
+        self.start_tour("/web", "mail/static/tests/tours/user_modify_own_profile_tour.js", login="demo")
+        self.assertEqual(self.env.ref('base.user_demo').email, "updatedemail@example.com")
diff --git a/odoo/addons/base/views/res_users_views.xml b/odoo/addons/base/views/res_users_views.xml
index c5031d38d33e77c2c97964853254ecf7e10af979..768c9e60274b93e2ab29b2a617541620ca5e8b93 100644
--- a/odoo/addons/base/views/res_users_views.xml
+++ b/odoo/addons/base/views/res_users_views.xml
@@ -444,7 +444,7 @@
             <field name="model">res.users</field>
             <field eval="18" name="priority"/>
             <field name="arch" type="xml">
-                <form string="Users">
+                <form string="Users" edit="1">
                     <field name="avatar_128" invisible="1"/>
                     <field name="image_1920" readonly="0" widget='image' class="oe_right oe_avatar" options='{"preview_image": "avatar_128"}'/>
                     <h1>