diff rhodecode/controllers/admin/repos.py @ 3628:c734686b3cf2 beta

moved permission management into separate entity. - this solves issues when whole form submision could influence permission management particular case is that when repo group permission is revoked and user is no longer able to update repository settings
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 28 Mar 2013 02:11:26 +0100
parents a8f2d78d14ea
children 802c94bdfc85
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py	Thu Mar 28 01:10:45 2013 +0100
+++ b/rhodecode/controllers/admin/repos.py	Thu Mar 28 02:11:26 2013 +0100
@@ -45,7 +45,7 @@
 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 @@
         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 @@
         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())