diff --git a/addons/mail/security/ir.model.access.csv b/addons/mail/security/ir.model.access.csv
index 5158c30bae2..cc467cc9b15 100644
--- a/addons/mail/security/ir.model.access.csv
+++ b/addons/mail/security/ir.model.access.csv
@@ -13,7 +13,8 @@ access_mail_notification_portal,mail.notification.portal,model_mail_notification
access_mail_notification_user,mail.notification.user,model_mail_notification,base.group_user,1,1,1,0
access_mail_notification_system, mail.notification.system,model_mail_notification,base.group_system,1,1,1,1
access_mail_channel_all,mail.group.all,model_mail_channel,,1,0,0,0
-access_mail_channel_user,mail.group.user,model_mail_channel,base.group_user,1,1,1,1
+access_mail_channel_user,mail.group.user,model_mail_channel,base.group_user,1,1,1,0
+access_mail_channel_admin,mail.group.system,model_mail_channel,base.group_system,1,1,1,1
access_mail_channel_partner_public,mail.channel.partner.public,model_mail_channel_partner,base.group_public,1,0,0,0
access_mail_channel_partner_portal,mail.channel.partner.portal,model_mail_channel_partner,base.group_portal,1,1,1,1
access_mail_channel_partner_user,mail.channel.partner.user,model_mail_channel_partner,base.group_user,1,1,1,1
diff --git a/addons/mail/security/mail_security.xml b/addons/mail/security/mail_security.xml
index 1c5fd4a30eb..cc6fca4671a 100644
--- a/addons/mail/security/mail_security.xml
+++ b/addons/mail/security/mail_security.xml
@@ -13,6 +13,13 @@
+
+ Mail.channel: admin full access
+
+
+ [(1, '=', 1)]
+
+
mail.channel.partner: write its own entries
@@ -27,6 +34,13 @@
+
+ mail.channel.partner: admin can manipulate all entries
+
+
+ [(1, '=', 1)]
+
+
mail.notifications: group_user: write its own entries
diff --git a/addons/mail/tests/test_mail_channel.py b/addons/mail/tests/test_mail_channel.py
index c5c404b1848..a7f49bdd67e 100644
--- a/addons/mail/tests/test_mail_channel.py
+++ b/addons/mail/tests/test_mail_channel.py
@@ -85,8 +85,9 @@ class TestChannelAccessRights(MailCommon):
# Employee update employee-based group: ok
group_groups.write({'name': 'modified'})
- # Employee unlink employee-based group: ok
- group_groups.unlink()
+ # Employee unlink employee-based group: ko
+ with self.assertRaises(AccessError):
+ group_groups.unlink()
# Employee cannot read a private group
with self.assertRaises(AccessError):
diff --git a/addons/test_discuss_full/tests/test_performance.py b/addons/test_discuss_full/tests/test_performance.py
index f430c8e5892..95ef678e4cd 100644
--- a/addons/test_discuss_full/tests/test_performance.py
+++ b/addons/test_discuss_full/tests/test_performance.py
@@ -60,7 +60,7 @@ class TestDiscussFullPerformance(TransactionCase):
def test_init_messaging(self):
"""Test performance of `_init_messaging`."""
channel_general = self.env.ref('mail.channel_all_employees') # Unfortunately #general cannot be deleted. Assertions below assume data from a fresh db with demo.
- self.env['mail.channel'].search([('id', '!=', channel_general.id)]).unlink()
+ self.env['mail.channel'].sudo().search([('id', '!=', channel_general.id)]).unlink()
user_root = self.env.ref('base.user_root')
# create public channels
channel_channel_public_1 = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(name='public 1', privacy='public')['id'])
diff --git a/addons/test_mail/tests/test_mail_thread_internals.py b/addons/test_mail/tests/test_mail_thread_internals.py
index a86f2b30bb4..5d351c3a2ec 100644
--- a/addons/test_mail/tests/test_mail_thread_internals.py
+++ b/addons/test_mail/tests/test_mail_thread_internals.py
@@ -273,7 +273,7 @@ class TestDiscuss(TestMailCommon, TestRecipients):
channel_message = self.env['mail.message'].sudo().search([('model', '=', 'mail.channel'), ('res_id', 'in', channel.ids)])
self.assertEqual(len(channel_message), 1, "Test message should have been posted")
- channel.unlink()
+ channel.sudo().unlink()
remaining_message = channel_message.exists()
self.assertEqual(len(remaining_message), 0, "Test message should have been deleted")