Skip to content

Commit

Permalink
[multisites] Enahnce behaviour for members
Browse files Browse the repository at this point in the history
 - Assign permissions on new site once the project is moderated
 - Allow a collaborator to access the new site and handle their project
  • Loading branch information
glibersat committed Feb 10, 2025
1 parent ee6b1c8 commit 2db4393
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
10 changes: 4 additions & 6 deletions recoco/apps/home/management/commands/update_permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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} ==")
Expand Down Expand Up @@ -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):
Expand Down
16 changes: 13 additions & 3 deletions recoco/apps/projects/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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 (
Expand Down
7 changes: 5 additions & 2 deletions recoco/apps/projects/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
from ..utils import (
assign_advisor,
assign_collaborator,
assign_collaborator_permissions,
assign_observer,
can_administrate_project,
is_advisor_for_project,
Expand Down Expand Up @@ -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),
Expand Down

0 comments on commit 2db4393

Please sign in to comment.