Manager Project Lead ['|', ('privacy_visibility', '!=', 'followers'), ('message_ids', 'in', [user.id]) ] company: Own Company [('company_id', 'in', company_ids + [False])] Manager: Own Projects [('user_id', '=', user.id)] Project/Task: project supervisor: see all tasks linked to his assigned project or its own tasks [ ('project_id.user_id','=',user.id), '|', ('project_id', '!=', False), ('user_ids', 'in', user.id), ] Project/Task: project users: don't see non generic tasks [ '&', '&', '&', ('project_id', '!=', False), ('is_generic', '=', False), ('user_ids', 'not in', user.id), ('involved_user_ids', 'not in', user.id), ] Project/Task: project lead: see all tasks [ '&', '&', '&', ('project_id', '!=', False), ('project_id.project_lead', '=', user.id), '|', ('is_generic', '=', True), ('is_generic', '=', False), '|', ('user_ids', 'in', user.id), ('user_ids', 'not in', user.id) ] [ '&', ('project_id', '!=', False), ('project_id.privacy_visibility', '!=', 'followers'), '|', '&', ('is_generic', '=', True), '|', '|', ('project_id', '!=', False), ('parent_id', '!=', False), ('user_ids', 'in', user.id), '&', ('is_generic', '=', False), '|', ('user_ids', 'in', user.id), ('involved_user_ids', 'in', user.id), ] [ '|', '&', ('project_id', '!=', False), '|', '|', ('is_generic', '=', True), ('user_ids', 'in', user.id), ('involved_user_ids', 'in', user.id), '&', ('project_id', '=', False), '|', ('message_partner_ids', 'in', [user.partner_id.id]), ('user_ids', 'in', user.id), ] [ '|', '&', ('project_id', '!=', False), '|', '|', ('is_generic', '=', True), ('user_ids', 'in', user.id), ('involved_user_ids', 'in', user.id), '&', ('project_id', '=', False), '|', ('message_partner_ids', 'in', [user.partner_id.id]), ('user_ids', 'in', user.id), ] [ '&', '&', ('user_id', '=', user.id), ('project_id', '!=', False), '|', '|', ('project_id.privacy_visibility', '!=', 'followers'), ('message_partner_ids', 'in', [user.partner_id.id]), '&', ('task_id', '!=', False), '|', ('task_id.user_ids', 'in', user.id), ('task_id.involved_user_ids', 'in', user.id) ] [ '&', '&', ('project_id', '!=', False), ('task_id', '!=', False), '|', '&', ('project_id.privacy_visibility', '=', 'followers'), '|', '|', ('project_id.project_lead', '=', user.id), ('project_id.user_id', '=', user.id), '|', '&', ('task_id.is_generic', '=', False), '|', ('user_id', 'in', 'task_id.user_ids'), ('user_id', 'in', 'task_id.involved_user_ids'), '&', ('task_id.is_generic', '=', True), ('user_id.partner_id', 'in', 'project_id.message_partner_ids'), '&', '&', ('project_id.privacy_visibility', '!=', 'followers'), ('task_id.is_generic', '=', False), '|', ('user_id', 'in', 'task_id.user_ids'), ('user_id', 'in', 'task_id.involved_user_ids') ] Project/Task: involved assignees see involved tasks [('involved_user_ids', 'in', user.id)] Timesheets: involved assignees can manage own lines [ '&', '&', '&', ('user_id', '=', user.id), ('project_id', '!=', False), ('task_id', '!=', False), ('task_id.involved_user_ids', 'in', user.id) ] Task Availability: project lead: see all user tasks [ '|', '|', ('project_id.project_lead', '=', user.id), ('user_id', '=', user.id), ('project_id.user_id', '=', user.id), ]