changeset 2987:4150c45b5f7f beta

Implemented #638 permissions overview to groups
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 06 Nov 2012 23:26:42 +0100
parents f8d827686e9a
children 8ca4d9f64ae0
files rhodecode/controllers/admin/users_groups.py rhodecode/public/css/style.css rhodecode/templates/admin/users_groups/users_group_edit.html
diffstat 3 files changed, 105 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/users_groups.py	Tue Nov 06 21:58:29 2012 +0100
+++ b/rhodecode/controllers/admin/users_groups.py	Tue Nov 06 23:26:42 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({
--- a/rhodecode/public/css/style.css	Tue Nov 06 21:58:29 2012 +0100
+++ b/rhodecode/public/css/style.css	Tue Nov 06 23:26:42 2012 +0100
@@ -3935,12 +3935,13 @@
 
 
 .group_members_wrap{
-	
+	min-height: 85px;
+	padding-left: 20px;
 }
 
 .group_members .group_member{
 	height: 30px;
-	padding:0px 0px 0px 10px;
+	padding:0px 0px 0px 0px;
 }
 
 .reviewers_member{
--- a/rhodecode/templates/admin/users_groups/users_group_edit.html	Tue Nov 06 21:58:29 2012 +0100
+++ b/rhodecode/templates/admin/users_groups/users_group_edit.html	Tue Nov 06 23:26:42 2012 +0100
@@ -145,20 +145,83 @@
     <div class="title">
         <h5>${_('Group members')}</h5>
     </div>
+
     <div class="group_members_wrap">
+    % if c.group_members_obj:
       <ul class="group_members">
       %for user in c.group_members_obj:
         <li>
           <div class="group_member">
             <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div>
-            <div>${user.username}</div>
+            <div>${h.link_to(user.username, h.url('edit_user',id=user.user_id))}</div>
             <div>${user.full_name}</div>
           </div>
         </li>
       %endfor
       </ul>
+      %else:
+        <span class="empty_data">${_('No members yet')}</span>
+      %endif          
     </div>
 </div>
+
+<div class="box box-left">
+    <!-- box / title -->
+    <div class="title">
+        <h5>${_('Permissions defined for this group')}</h5>
+    </div>
+ ## permissions overview
+    <div id="perms" class="table">
+       %for section in sorted(c.users_group.permissions.keys()):
+          <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
+          %if not c.users_group.permissions:
+              <span class="empty_data">${_('No permissions set yet')}</span>
+          %else:
+          <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
+           <table id="tbl_list_repository">
+            <thead>
+                <tr>
+                <th class="left">${_('Name')}</th>
+                <th class="left">${_('Permission')}</th>
+                <th class="left">${_('Edit Permission')}</th>
+            </thead>
+            <tbody>
+            %for k in c.users_group.permissions[section]:
+                 <%
+                     section_perm = c.users_group.permissions[section].get(k)
+                     _perm = section_perm.split('.')[-1]
+                 %>
+                <tr>
+                    <td>
+                        %if section == 'repositories':
+                            <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
+                        %elif section == 'repositories_groups':
+                            <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
+                        %endif
+                    </td>
+                    <td>
+                         <span class="perm_tag ${_perm}">${section_perm}</span>
+                    </td>
+                    <td>
+                        %if section == 'repositories':
+                            <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
+                        %elif section == 'repositories_groups':
+                            <a href="${h.url('edit_repos_group',id=k,anchor='permissions_manage')}">${_('edit')}</a>
+                        %else:
+                            --
+                        %endif
+                    </td>
+                </tr>
+            %endfor
+            </tbody>
+           </table>
+          </div>
+          %endif
+       %endfor
+    </div>
+</div>
+
+
 <script type="text/javascript">
   MultiSelectWidget('users_group_members','available_members','edit_users_group');
 </script>