diff rhodecode/controllers/admin/users_groups.py @ 3098:a5f0bc867edc rhodecode-0.0.1.5.0

merge with beta
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 13 Dec 2012 22:54:21 +0100
parents 4150c45b5f7f
children 5f1850e4712a
line wrap: on
line diff
--- a/rhodecode/controllers/admin/users_groups.py	Tue Oct 09 00:57:07 2012 +0200
+++ b/rhodecode/controllers/admin/users_groups.py	Thu Dec 13 22:54:21 2012 +0100
@@ -40,10 +40,12 @@
 
 from rhodecode.model.users_group import UsersGroupModel
 
-from rhodecode.model.db import User, UsersGroup
+from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\
+    UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm
 from rhodecode.model.forms import UsersGroupForm
 from rhodecode.model.meta import Session
 from rhodecode.lib.utils import action_logger
+from sqlalchemy.orm import joinedload
 
 log = logging.getLogger(__name__)
 
@@ -102,6 +104,38 @@
         # url('new_users_group')
         return render('admin/users_groups/users_group_add.html')
 
+    def _load_data(self, id):
+        c.users_group.permissions = {
+            'repositories': {},
+            'repositories_groups': {}
+        }
+
+        ugroup_repo_perms = UsersGroupRepoToPerm.query()\
+            .options(joinedload(UsersGroupRepoToPerm.permission))\
+            .options(joinedload(UsersGroupRepoToPerm.repository))\
+            .filter(UsersGroupRepoToPerm.users_group_id == id)\
+            .all()
+
+        for gr in ugroup_repo_perms:
+            c.users_group.permissions['repositories'][gr.repository.repo_name]  \
+                = gr.permission.permission_name
+
+        ugroup_group_perms = UsersGroupRepoGroupToPerm.query()\
+            .options(joinedload(UsersGroupRepoGroupToPerm.permission))\
+            .options(joinedload(UsersGroupRepoGroupToPerm.group))\
+            .filter(UsersGroupRepoGroupToPerm.users_group_id == id)\
+            .all()
+
+        for gr in ugroup_group_perms:
+            c.users_group.permissions['repositories_groups'][gr.group.group_name] \
+                = gr.permission.permission_name
+
+        c.group_members_obj = [x.user for x in c.users_group.members]
+        c.group_members = [(x.user_id, x.username) for x in
+                           c.group_members_obj]
+        c.available_members = [(x.user_id, x.username) for x in
+                               User.query().all()]
+
     def update(self, id):
         """PUT /users_groups/id: Update an existing item"""
         # Forms posted to this method should contain a hidden field:
@@ -111,13 +145,8 @@
         #           method='put')
         # url('users_group', id=ID)
 
-        c.users_group = UsersGroup.get(id)
-        c.group_members_obj = [x.user for x in c.users_group.members]
-        c.group_members = [(x.user_id, x.username) for x in
-                           c.group_members_obj]
-
-        c.available_members = [(x.user_id, x.username) for x in
-                               User.query().all()]
+        c.users_group = UsersGroup.get_or_404(id)
+        self._load_data(id)
 
         available_members = [safe_unicode(x[0]) for x in c.available_members]
 
@@ -189,13 +218,8 @@
         # url('edit_users_group', id=ID)
 
         c.users_group = UsersGroup.get_or_404(id)
+        self._load_data(id)
 
-        c.users_group.permissions = {}
-        c.group_members_obj = [x.user for x in c.users_group.members]
-        c.group_members = [(x.user_id, x.username) for x in
-                           c.group_members_obj]
-        c.available_members = [(x.user_id, x.username) for x in
-                               User.query().all()]
         ug_model = UsersGroupModel()
         defaults = c.users_group.get_dict()
         defaults.update({