diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -46,6 +46,7 @@ from rhodecode.model.db import ( Session, Repository, UserRepoToPerm, UserGroupRepoToPerm, UserRepoGroupToPerm, UserGroupRepoGroupToPerm, User, Permission, Statistics, UserGroup, RepoGroup, RepositoryField, UserLog) +from rhodecode.model.permission import PermissionModel from rhodecode.model.settings import VcsSettingsModel log = logging.getLogger(__name__) @@ -422,8 +423,15 @@ class RepoModel(BaseModel): try: cur_repo = self._get_repo(repo) source_repo_name = cur_repo.repo_name + + affected_user_ids = [] if 'user' in kwargs: - cur_repo.user = User.get_by_username(kwargs['user']) + old_owner_id = cur_repo.user.user_id + new_owner = User.get_by_username(kwargs['user']) + cur_repo.user = new_owner + + if old_owner_id != new_owner.user_id: + affected_user_ids = [new_owner.user_id, old_owner_id] if 'repo_group' in kwargs: cur_repo.group = RepoGroup.get(kwargs['repo_group']) @@ -474,6 +482,9 @@ class RepoModel(BaseModel): self._rename_filesystem_repo( old=source_repo_name, new=new_name) + if affected_user_ids: + PermissionModel().trigger_permission_flush(affected_user_ids) + return cur_repo except Exception: log.error(traceback.format_exc()) diff --git a/rhodecode/model/repo_group.py b/rhodecode/model/repo_group.py --- a/rhodecode/model/repo_group.py +++ b/rhodecode/model/repo_group.py @@ -39,6 +39,7 @@ from rhodecode.model import BaseModel from rhodecode.model.db import (_hash_key, func, or_, in_filter_generator, Session, RepoGroup, UserRepoGroupToPerm, User, Permission, UserGroupRepoGroupToPerm, UserGroup, Repository) +from rhodecode.model.permission import PermissionModel from rhodecode.model.settings import VcsSettingsModel, SettingsModel from rhodecode.lib.caching_query import FromCache from rhodecode.lib.utils2 import action_logger_generic @@ -531,8 +532,14 @@ class RepoGroupModel(BaseModel): new_path = repo_group.full_path + affected_user_ids = [] if 'user' in form_data: - repo_group.user = User.get_by_username(form_data['user']) + old_owner_id = repo_group.user.user_id + new_owner = User.get_by_username(form_data['user']) + repo_group.user = new_owner + + if old_owner_id != new_owner.user_id: + affected_user_ids = [new_owner.user_id, old_owner_id] self.sa.add(repo_group) @@ -566,6 +573,9 @@ class RepoGroupModel(BaseModel): # Trigger update event. events.trigger(events.RepoGroupUpdateEvent(repo_group)) + if affected_user_ids: + PermissionModel().trigger_permission_flush(affected_user_ids) + return repo_group except Exception: log.error(traceback.format_exc())