diff --git a/rhodecode/controllers/admin/repos.py b/rhodecode/controllers/admin/repos.py --- a/rhodecode/controllers/admin/repos.py +++ b/rhodecode/controllers/admin/repos.py @@ -45,7 +45,7 @@ from rhodecode.lib.helpers import get_to from rhodecode.model.meta import Session from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\ RhodeCodeSetting, RepositoryField -from rhodecode.model.forms import RepoForm, RepoFieldForm +from rhodecode.model.forms import RepoForm, RepoFieldForm, RepoPermsForm from rhodecode.model.scm import ScmModel, GroupList from rhodecode.model.repo import RepoModel from rhodecode.lib.compat import json @@ -330,6 +330,42 @@ class ReposController(BaseRepoController return redirect(url('repos')) @HasRepoPermissionAllDecorator('repository.admin') + def set_repo_perm_member(self, repo_name): + form = RepoPermsForm()().to_python(request.POST) + + perms_new = form['perms_new'] + perms_updates = form['perms_updates'] + cur_repo = repo_name + + # update permissions + for member, perm, member_type in perms_updates: + if member_type == 'user': + # this updates existing one + RepoModel().grant_user_permission( + repo=cur_repo, user=member, perm=perm + ) + else: + RepoModel().grant_users_group_permission( + repo=cur_repo, group_name=member, perm=perm + ) + # set new permissions + for member, perm, member_type in perms_new: + if member_type == 'user': + RepoModel().grant_user_permission( + repo=cur_repo, user=member, perm=perm + ) + else: + RepoModel().grant_users_group_permission( + repo=cur_repo, group_name=member, perm=perm + ) + #TODO: implement this + #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions', + # repo_name, self.ip_addr, self.sa) + Session().commit() + h.flash(_('updated repository permissions'), category='success') + return redirect(url('edit_repo', repo_name=repo_name)) + + @HasRepoPermissionAllDecorator('repository.admin') def delete_perm_user(self, repo_name): """ DELETE an existing repository permission user @@ -339,6 +375,9 @@ class ReposController(BaseRepoController try: RepoModel().revoke_user_permission(repo=repo_name, user=request.POST['user_id']) + #TODO: implement this + #action_logger(self.rhodecode_user, 'admin_revoked_repo_permissions', + # repo_name, self.ip_addr, self.sa) Session().commit() except Exception: log.error(traceback.format_exc())