Mercurial > kallithea
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>