diff --git a/data/model/organization.py b/data/model/organization.py index e83c6907e..a63b020cc 100644 --- a/data/model/organization.py +++ b/data/model/organization.py @@ -35,23 +35,30 @@ def get_organization(name): def convert_user_to_organization(user_obj, admin_user): - # Change the user to an organization. - user_obj.organization = True + if user_obj.robot: + raise DataModelException('Cannot convert a robot into an organization') - # disable this account for login. - user_obj.password_hash = None - user_obj.save() + with db_transaction(): + # Change the user to an organization and disable this account for login. + user_obj.organization = True + user_obj.password_hash = None + user_obj.save() - # Clear any federated auth pointing to this user - FederatedLogin.delete().where(FederatedLogin.user == user_obj).execute() + # Clear any federated auth pointing to this user. + FederatedLogin.delete().where(FederatedLogin.user == user_obj).execute() - # Create a team for the owners - owners_team = team.create_team('owners', user_obj, 'admin') + # Delete any user-specific permissions on repositories. + (RepositoryPermission.delete() + .where(RepositoryPermission.user == user_obj) + .execute()) - # Add the user who will admin the org to the owners team - team.add_user_to_team(admin_user, owners_team) + # Create a team for the owners + owners_team = team.create_team('owners', user_obj, 'admin') - return user_obj + # Add the user who will admin the org to the owners team + team.add_user_to_team(admin_user, owners_team) + + return user_obj def get_user_organizations(username): diff --git a/static/directives/convert-user-to-org.html b/static/directives/convert-user-to-org.html index 4ba2d356a..17de3c008 100644 --- a/static/directives/convert-user-to-org.html +++ b/static/directives/convert-user-to-org.html @@ -1,15 +1,19 @@