Skip to content

Commit

Permalink
Transfer project ownership to no admin members too
Browse files Browse the repository at this point in the history
  • Loading branch information
bameda authored and superalex committed Mar 18, 2016
1 parent 2fd0a19 commit 11b6cc0
Show file tree
Hide file tree
Showing 5 changed files with 169 additions and 134 deletions.
9 changes: 3 additions & 6 deletions taiga/projects/api.py
Expand Up @@ -358,15 +358,12 @@ def transfer_start(self, request, pk=None):
user_model = apps.get_model("users", "User")
try:
user = user_model.objects.get(id=user_id)

except user_model.DoesNotExist:
return response.BadRequest(_("The user doesn't exist"))

# Check the user is an admin membership from the project
try:
project.memberships.get(is_admin=True, user=user)
except apps.get_model("projects", "Membership").DoesNotExist:
return response.BadRequest(_("The user must be an admin member of the project"))
# Check the user is a membership from the project
if not project.memberships.filter(user=user).exists():
return response.BadRequest(_("The user must be a member of the project"))

reason = request.DATA.get('reason', None)
transfer_token = services.start_project_transfer(project, user, reason)
Expand Down
6 changes: 3 additions & 3 deletions taiga/projects/permissions.py
Expand Up @@ -77,11 +77,11 @@ class ProjectPermission(TaigaResourcePermission):
unwatch_perms = IsAuthenticated() & HasProjectPerm('view_project')
create_template_perms = IsSuperUser()
leave_perms = CanLeaveProject()
transfer_validate_token_perms = IsProjectAdmin()
transfer_validate_token_perms = IsAuthenticated() & HasProjectPerm('view_project')
transfer_request_perms = IsProjectAdmin()
transfer_start_perms = IsMainOwner()
transfer_reject_perms = IsProjectAdmin()
transfer_accept_perms = IsProjectAdmin()
transfer_reject_perms = IsAuthenticated() & HasProjectPerm('view_project')
transfer_accept_perms = IsAuthenticated() & HasProjectPerm('view_project')


class ProjectFansPermission(TaigaResourcePermission):
Expand Down
9 changes: 8 additions & 1 deletion taiga/projects/services/transfer.py
Expand Up @@ -90,12 +90,19 @@ def reject_project_transfer(project, user, token, reason):
def accept_project_transfer(project, user, token, reason):
validate_project_transfer_token(token, project, user)

old_owner = project.owner
# Set new owner as project admin
membership = project.memberships.get(user=user)
if not membership.is_admin:
membership.is_admin = True
membership.save()

# Change the owner of the project
old_owner = project.owner
project.transfer_token = None
project.owner = user
project.save()

# Send mail
template = mail_builder.transfer_accept
context = {
"project": project,
Expand Down
8 changes: 6 additions & 2 deletions tests/factories.py
Expand Up @@ -26,6 +26,9 @@

import factory

from taiga.permissions.permissions import MEMBERS_PERMISSIONS



class Factory(factory.DjangoModelFactory):
class Meta:
Expand Down Expand Up @@ -555,8 +558,9 @@ def create_membership(**kwargs):

defaults = {
"project": project,
"user": project.owner,
"role": RoleFactory.create(project=project)
"user": UserFactory.create(),
"role": RoleFactory.create(project=project,
permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
}
defaults.update(kwargs)

Expand Down

0 comments on commit 11b6cc0

Please sign in to comment.