Project: employees: public, portal, employees or following ['|', ('privacy_visibility', 'in', ['public', 'portal', 'employees']), '&', ('privacy_visibility', '=', 'followers'), ('message_follower_ids', 'in', [user.partner_id.id]), ] Project: portal users: public, portal or following [ '|', '|', ('privacy_visibility', '=', 'public'), '&', ('privacy_visibility', '=', 'portal'), ('message_follower_ids', 'child_of', [user.partner_id.commercial_partner_id.id]), '&', ('privacy_visibility', '=', 'followers'), ('message_follower_ids', 'in', [user.partner_id.id]) ] Project: public users: public only [('privacy_visibility', '=', 'public')] Project/Task: employees: public, portal, employee or (followers and following) [ '|', ('project_id.privacy_visibility', 'in', ['public', 'portal', 'employees']), '|', '&', ('project_id.privacy_visibility', '=', 'followers'), ('project_id.message_follower_ids', 'in', [user.partner_id.id]), '|', ('message_follower_ids', 'in', [user.partner_id.id]), ('user_id', '=', user.id) ] Project/Task: portal users: public or (portal and colleagues following) or (followers and following) [ '|', '|', '|', ('project_id.privacy_visibility', '=', 'public'), '&', ('project_id.privacy_visibility', '=', 'portal'), ('project_id.message_follower_ids', 'child_of', [user.partner_id.commercial_partner_id.id]), '&', ('project_id.privacy_visibility', '=', 'followers'), ('project_id.message_follower_ids', 'in', [user.partner_id.id]), '&', # on employee project can receive messages but not access the object ('project_id.privacy_visibility', '!=', 'employees'), ('message_follower_ids', 'in', [user.partner_id.id]) ] Project/Task: public users: public only [('project_id.privacy_visibility', '=', 'public')]