permissions: flush permissions on owner changes for repo and repo groups.

This commit is contained in:
Milka Kuzminski 2021-03-24 14:54:26 +01:00
parent c0254f7952
commit ae9f4779d2
2 changed files with 23 additions and 2 deletions

View file

@ -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())

View file

@ -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())