[FIX] mail: portal user access error on init
closes odoo/odoo#114568 X-original-commit: bccdf65192140308d4661482a9dcb431cba8126a Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
This commit is contained in:
@@ -764,7 +764,7 @@ class Channel(models.Model):
|
||||
[('guest_id', '=', current_guest.id) if current_guest else expression.FALSE_LEAF],
|
||||
])
|
||||
all_needed_members = self.env['mail.channel.member'].search(expression.AND([[('channel_id', 'in', self.ids)], all_needed_members_domain]), order='id')
|
||||
all_needed_members.partner_id.mail_partner_format() # prefetch in batch
|
||||
all_needed_members.partner_id.sudo().mail_partner_format() # prefetch in batch
|
||||
members_by_channel = defaultdict(lambda: self.env['mail.channel.member'])
|
||||
invited_members_by_channel = defaultdict(lambda: self.env['mail.channel.member'])
|
||||
member_of_current_user_by_channel = defaultdict(lambda: self.env['mail.channel.member'])
|
||||
|
||||
@@ -151,7 +151,7 @@ class ChannelMember(models.Model):
|
||||
if member.partner_id:
|
||||
persona = {'partner': member._get_partner_data(fields=fields.get('persona', {}).get('partner'))}
|
||||
if member.guest_id:
|
||||
persona = {'guest': member.guest_id._guest_format(fields=fields.get('persona', {}).get('guest')).get(member.guest_id)}
|
||||
persona = {'guest': member.guest_id.sudo()._guest_format(fields=fields.get('persona', {}).get('guest')).get(member.guest_id)}
|
||||
data['persona'] = persona
|
||||
members_formatted_data[member] = data
|
||||
return members_formatted_data
|
||||
|
||||
@@ -234,7 +234,7 @@ class Partner(models.Model):
|
||||
"id": main_user.id,
|
||||
"isInternalUser": not main_user.share,
|
||||
} if main_user else [('clear',)]
|
||||
if 'guest' in self.env.context:
|
||||
if 'guest' in self.env.context or not self.env.user._is_internal():
|
||||
data.pop('email', None)
|
||||
partners_format[partner] = data
|
||||
return partners_format
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
import odoo
|
||||
from odoo.tests import HttpCase
|
||||
|
||||
from odoo.addons.mail.tests.common import mail_new_test_user
|
||||
|
||||
@odoo.tests.tagged('-at_install', 'post_install')
|
||||
class TestMailPublicPage(HttpCase):
|
||||
@@ -12,7 +12,30 @@ class TestMailPublicPage(HttpCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
portal_user = mail_new_test_user(
|
||||
self.env,
|
||||
name='Portal Bowser',
|
||||
login='portal_bowser',
|
||||
email='portal_bowser@example.com',
|
||||
groups='base.group_portal',
|
||||
)
|
||||
internal_user = mail_new_test_user(
|
||||
self.env,
|
||||
name='Internal Luigi',
|
||||
login='internal_luigi',
|
||||
email='internal_luigi@example.com',
|
||||
groups='base.group_user',
|
||||
)
|
||||
guest = self.env['mail.guest'].create({'name': 'Guest Mario'})
|
||||
|
||||
self.channel = self.env['mail.channel'].browse(self.env['mail.channel'].channel_create(group_id=None, name='Test channel')['id'])
|
||||
self.channel.add_members(portal_user.partner_id.ids)
|
||||
self.channel.add_members(internal_user.partner_id.ids)
|
||||
self.channel.add_members(guest_ids=[guest.id])
|
||||
|
||||
self.group = self.env['mail.channel'].browse(self.env['mail.channel'].create_group(partners_to=(internal_user + portal_user).partner_id.ids, name="Test group")['id'])
|
||||
self.group.add_members(guest_ids=[guest.id])
|
||||
|
||||
self.tour = "mail/static/tests/tours/discuss_public_tour.js"
|
||||
|
||||
def _open_channel_page_as_user(self, login):
|
||||
@@ -21,16 +44,36 @@ class TestMailPublicPage(HttpCase):
|
||||
# the channel, so we need to run it again to test different parts of the code.
|
||||
self.start_tour(self.channel.invitation_url, self.tour, login=login)
|
||||
|
||||
def _open_group_page_as_user(self, login):
|
||||
self.start_tour(self.group.invitation_url, self.tour, login=login)
|
||||
# Second run of the tour as the first call has side effects, like creating user settings or adding members to
|
||||
# the channel, so we need to run it again to test different parts of the code.
|
||||
self.start_tour(self.group.invitation_url, self.tour, login=login)
|
||||
|
||||
def test_mail_channel_public_page_as_admin(self):
|
||||
self._open_channel_page_as_user('admin')
|
||||
|
||||
def test_mail_group_public_page_as_admin(self):
|
||||
self._open_group_page_as_user('admin')
|
||||
|
||||
def test_mail_channel_public_page_as_guest(self):
|
||||
self.start_tour(self.channel.invitation_url, "mail/static/tests/tours/mail_channel_as_guest_tour.js")
|
||||
guest = self.env['mail.guest'].search([('channel_ids', 'in', self.channel.id)], limit=1, order='id desc')
|
||||
self.start_tour(self.channel.invitation_url, self.tour, cookies={guest._cookie_name: f"{guest.id}{guest._cookie_separator}{guest.access_token}"})
|
||||
|
||||
def test_mail_group_public_page_as_guest(self):
|
||||
self.start_tour(self.group.invitation_url, "mail/static/tests/tours/mail_channel_as_guest_tour.js")
|
||||
guest = self.env['mail.guest'].search([('channel_ids', 'in', self.channel.id)], limit=1, order='id desc')
|
||||
self.start_tour(self.group.invitation_url, self.tour, cookies={guest._cookie_name: f"{guest.id}{guest._cookie_separator}{guest.access_token}"})
|
||||
|
||||
def test_mail_channel_public_page_as_internal(self):
|
||||
self._open_channel_page_as_user('demo')
|
||||
|
||||
def test_mail_group_public_page_as_internal(self):
|
||||
self._open_group_page_as_user('demo')
|
||||
|
||||
def test_mail_channel_public_page_as_portal(self):
|
||||
self._open_channel_page_as_user('portal')
|
||||
|
||||
def test_mail_group_public_page_as_portal(self):
|
||||
self._open_group_page_as_user('portal')
|
||||
|
||||
Reference in New Issue
Block a user