[FIX] mail: Discuss: don't suggest to join private channels

Problem was that administrators have access to every channels, even private
channels they are not registered to, because when trying to join an existing
channel, the autocomplete proposed every channels accessible for the user, but
didn't filter private ones.

This rev. makes sure to only suggest non-private channels.

Also prevent '|' domain injection to disable filters (odoo/odoo@44e65e72d3)
by using expression.py to build domain.
This commit is contained in:
Aaron Bohy
2016-01-08 14:32:51 +01:00
parent 0fbc128033
commit dfdd38e3b2
+7 -7
View File
@@ -500,13 +500,8 @@ class Channel(models.Model):
values['channel_private_group'] = self.search([('channel_type', '=', 'channel'), ('public', '=', 'private'), ('channel_partner_ids', 'in', [my_partner_id])]).channel_info()
return values
# TODO master: remove domain argument
@api.model
def channel_search_to_join(self, name=None, domain=None):
return self._channel_search_to_join(name)
@api.model
def _channel_search_to_join(self, name=None, domain=None):
""" Return the channel info of the channel the current partner can join
:param name : the name of the researched channels
:param domain : the base domain of the research
@@ -514,9 +509,14 @@ class Channel(models.Model):
"""
if not domain:
domain = []
domain += [('channel_type', '=', 'channel'), ('channel_partner_ids', 'not in', [self.env.user.partner_id.id])]
domain = expression.AND([
[('channel_type', '=', 'channel')],
[('channel_partner_ids', 'not in', [self.env.user.partner_id.id])],
[('public', '!=', 'private')],
domain
])
if name:
domain.append(('name', 'ilike', '%'+name+'%'))
domain = expression.AND([domain, [('name', 'ilike', '%'+name+'%')]])
return self.search(domain).read(['name', 'public', 'uuid', 'channel_type'])
@api.multi