[FIX] project: use user right on portal task
The search on project were done as sudo with a domain matching the
"project_task_rule_portal" rule. This commits remove the sudo call
and corresponding domains.
This replace lpe's fix b8fe404e, and user connected to portal to see
his tasks, avoiding an error during crawling tests:
Error use case:
User try to access a task list from /my/projects with a filter on a project.
The project filter does not exist in task list since the rules applied are for
portal user -> an error is raised
Now, project list on /my/projects and the filter available on /my/tasks should
be the same.
This commit is contained in:
@@ -17,12 +17,8 @@ class CustomerPortal(CustomerPortal):
|
||||
|
||||
def _prepare_portal_layout_values(self):
|
||||
values = super(CustomerPortal, self)._prepare_portal_layout_values()
|
||||
Project = request.env['project.project']
|
||||
Task = request.env['project.task']
|
||||
# portal users can't view projects they don't follow
|
||||
projects = Project.sudo().search([('privacy_visibility', '=', 'portal')])
|
||||
values['project_count'] = Project.search_count([('id', 'in', projects.ids)])
|
||||
values['task_count'] = Task.search_count([('project_id', 'in', projects.ids)])
|
||||
values['project_count'] = request.env['project.project'].search_count([])
|
||||
values['task_count'] = request.env['project.task'].search_count([])
|
||||
return values
|
||||
|
||||
# ------------------------------------------------------------
|
||||
@@ -39,7 +35,7 @@ class CustomerPortal(CustomerPortal):
|
||||
def portal_my_projects(self, page=1, date_begin=None, date_end=None, sortby=None, **kw):
|
||||
values = self._prepare_portal_layout_values()
|
||||
Project = request.env['project.project']
|
||||
domain = [('privacy_visibility', '=', 'portal')]
|
||||
domain = []
|
||||
|
||||
searchbar_sortings = {
|
||||
'date': {'label': _('Newest'), 'order': 'create_date desc'},
|
||||
@@ -127,20 +123,12 @@ class CustomerPortal(CustomerPortal):
|
||||
}
|
||||
# extends filterby criteria with project (criteria name is the project id)
|
||||
# Note: portal users can't view projects they don't follow
|
||||
partner = request.env.user.partner_id
|
||||
domain_projects = [
|
||||
'&',
|
||||
('privacy_visibility', '=', 'portal'),
|
||||
'|',
|
||||
('message_partner_ids', 'child_of', [partner.commercial_partner_id.id]),
|
||||
('task_ids.message_partner_ids', 'child_of', [partner.commercial_partner_id.id])
|
||||
]
|
||||
|
||||
projects = request.env['project.project'].sudo().search(domain_projects)
|
||||
domain = [('project_id', 'in', projects.ids)]
|
||||
for proj in projects:
|
||||
project_groups = request.env['project.task'].read_group([], ['project_id'], ['project_id'])
|
||||
for group in project_groups:
|
||||
proj_id = group['project_id'][0] if group['project_id'] else False
|
||||
proj_name = group['project_id'][1] if group['project_id'] else _('Others')
|
||||
searchbar_filters.update({
|
||||
str(proj.id): {'label': proj.name, 'domain': [('project_id', '=', proj.id)]}
|
||||
str(proj_id): {'label': proj_name, 'domain': [('project_id', '=', proj_id)]}
|
||||
})
|
||||
|
||||
# default sort by value
|
||||
@@ -150,7 +138,7 @@ class CustomerPortal(CustomerPortal):
|
||||
# default filter by value
|
||||
if not filterby:
|
||||
filterby = 'all'
|
||||
domain += searchbar_filters[filterby]['domain']
|
||||
domain = searchbar_filters[filterby]['domain']
|
||||
|
||||
# archive groups - Default Group By 'create_date'
|
||||
archive_groups = self._get_archive_groups('project.task', domain)
|
||||
@@ -193,7 +181,6 @@ class CustomerPortal(CustomerPortal):
|
||||
values.update({
|
||||
'date': date_begin,
|
||||
'date_end': date_end,
|
||||
'projects': projects,
|
||||
'grouped_tasks': grouped_tasks,
|
||||
'page_name': 'task',
|
||||
'archive_groups': archive_groups,
|
||||
|
||||
Reference in New Issue
Block a user