diff --git a/recoco/apps/home/management/commands/update_permissions.py b/recoco/apps/home/management/commands/update_permissions.py index 06d710329..27930c6ee 100644 --- a/recoco/apps/home/management/commands/update_permissions.py +++ b/recoco/apps/home/management/commands/update_permissions.py @@ -16,23 +16,21 @@ from recoco.apps.projects.models import Project, ProjectSwitchtender from recoco.apps.projects.utils import ( assign_advisor, - assign_collaborator, + assign_collaborator_permissions, assign_observer, ) from recoco.utils import get_group_for_site def assign_user_permissions_by_projects(): - """Per project permission for user""" + """Per project permission for user.""" for project in Project.objects.all(): print("Updating perms for project:", project.name) for site in project.sites.all(): print("\t* Updating permissions for collaborators...") with settings.SITE_ID.override(site.id): for membership in project.projectmember_set.all(): - assign_collaborator( - membership.member, project, is_owner=membership.is_owner - ) + assign_collaborator_permissions(membership.member, project) print("\t* Updating permissions for advisors/observers...") print(f"\t== On site {site} ==") @@ -63,7 +61,7 @@ def assign_user_permissions_by_projects(): def assign_group_permissions_by_sites(): - """Per site permissions for Group""" + """Per site permissions for Group.""" for site in Site.objects.all(): print("site:", site) with settings.SITE_ID.override(site.id): diff --git a/recoco/apps/projects/utils.py b/recoco/apps/projects/utils.py index 4c217a4d6..7ff52d3f7 100644 --- a/recoco/apps/projects/utils.py +++ b/recoco/apps/projects/utils.py @@ -25,11 +25,14 @@ @transaction.atomic -def assign_collaborator(user, project, is_owner=False): - """Make someone becomes a project collaborator and assign permissions""" +def assign_collaborator_permissions(user, project): + """ + Assign permissions to project collaborator. + If the project is still in draft (not accepted by moderators) + """ permissions = models.COLLABORATOR_DRAFT_PERMISSIONS - if project.project_sites.origin().status != "DRAFT": + if project.project_sites.current().status != "DRAFT": permissions += models.COLLABORATOR_PERMISSIONS for perm in permissions: @@ -39,6 +42,13 @@ def assign_collaborator(user, project, is_owner=False): print(f"Unable to find permission <{perm}>, aborting.") raise e + +@transaction.atomic +def assign_collaborator(user, project, is_owner=False): + """Make someone becomes a project collaborator and assign permissions""" + + assign_collaborator_permissions(user, project) + # if we already have an owner, don't allow her to be replaced if is_owner: if ( diff --git a/recoco/apps/projects/views/__init__.py b/recoco/apps/projects/views/__init__.py index a5f622067..71385029d 100644 --- a/recoco/apps/projects/views/__init__.py +++ b/recoco/apps/projects/views/__init__.py @@ -37,6 +37,7 @@ from ..utils import ( assign_advisor, assign_collaborator, + assign_collaborator_permissions, assign_observer, can_administrate_project, is_advisor_for_project, @@ -159,8 +160,10 @@ def project_moderation_accept(request, project_pk): # Invite her to fill in a new form # Send an email to the project owner - # TODO: We should iterate over the collaborator list to assign them the - # project permission for this site (permisssion = COLLABORATOR) + # We assign permissions to use their project on this website in + # case of multiplication + for membership in project.projectmember_set.all(): + assign_collaborator_permissions(membership.member, project) params = { "project": digests.make_project_digest(project, owner),