# HG changeset patch # User Marcin Kuzminski # Date 1365457748 -7200 # Node ID 25dbbdae3ed98b314fcaac16208462976f07a51f # Parent 7e3d89d9d3a21b9e4ac4beac0ef15b6ed7c9bb76 consistent handling of grant/revoke of permissions widgets - use 1 method for users and for users groups - use common JS for ajax revoke - cleanup code diff -r 7e3d89d9d3a2 -r 25dbbdae3ed9 rhodecode/config/routing.py --- a/rhodecode/config/routing.py Mon Apr 08 22:47:35 2013 +0200 +++ b/rhodecode/config/routing.py Mon Apr 08 23:49:08 2013 +0200 @@ -122,19 +122,15 @@ action="show", conditions=dict(method=["GET"], function=check_repo)) #add repo perm member - m.connect('set_repo_perm_member', "/set_repo_perm_member/{repo_name:.*?}", - action="set_repo_perm_member", - conditions=dict(method=["POST"], function=check_repo)) + m.connect('set_repo_perm_member', + "/repos/{repo_name:.*?}/grant_perm", + action="set_repo_perm_member", + conditions=dict(method=["POST"], function=check_repo)) #ajax delete repo perm user - m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}", - action="delete_perm_user", - conditions=dict(method=["DELETE"], function=check_repo)) - - #ajax delete repo perm users_group - m.connect('delete_repo_users_group', - "/repos_delete_users_group/{repo_name:.*?}", - action="delete_perm_users_group", + m.connect('delete_repo_perm_member', + "/repos/{repo_name:.*?}/revoke_perm", + action="delete_repo_perm_member", conditions=dict(method=["DELETE"], function=check_repo)) #settings actions @@ -184,6 +180,18 @@ m.connect("update_repos_group", "/repos_groups/{group_name:.*?}", action="update", conditions=dict(method=["PUT"], function=check_group)) + #add repo group perm member + m.connect('set_repo_group_perm_member', + "/repos_groups/{group_name:.*?}/grant_perm", + action="set_repo_group_perm_member", + conditions=dict(method=["POST"], function=check_group)) + + #ajax delete repo group perm + m.connect('delete_repo_group_perm_member', + "/repos_groups/{group_name:.*?}/revoke_perm", + action="delete_repo_group_perm_member", + conditions=dict(method=["DELETE"], function=check_group)) + m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}", action="delete", conditions=dict(method=["DELETE"], function=check_group_skip_path)) @@ -201,24 +209,6 @@ action="show", conditions=dict(method=["GET"], function=check_group)) - #add repo perm member - m.connect('set_repo_group_perm_member', - "/set_repo_group_perm_member/{group_name:.*?}", - action="set_repo_group_perm_member", - conditions=dict(method=["POST"], function=check_group)) - - # ajax delete repository group perm user - m.connect('delete_repos_group_user_perm', - "/delete_repos_group_user_perm/{group_name:.*?}", - action="delete_repos_group_user_perm", - conditions=dict(method=["DELETE"], function=check_group)) - - # ajax delete repository group perm users_group - m.connect('delete_repos_group_users_group_perm', - "/delete_repos_group_users_group_perm/{group_name:.*?}", - action="delete_repos_group_users_group_perm", - conditions=dict(method=["DELETE"], function=check_group)) - #ADMIN USER REST ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/users') as m: diff -r 7e3d89d9d3a2 -r 25dbbdae3ed9 rhodecode/controllers/admin/repos.py --- a/rhodecode/controllers/admin/repos.py Mon Apr 08 22:47:35 2013 +0200 +++ b/rhodecode/controllers/admin/repos.py Mon Apr 08 23:49:08 2013 +0200 @@ -51,6 +51,7 @@ from rhodecode.lib.compat import json from sqlalchemy.sql.expression import func from rhodecode.lib.exceptions import AttachedForksError +from rhodecode.lib.utils2 import safe_int log = logging.getLogger(__name__) @@ -340,42 +341,33 @@ return redirect(url('edit_repo', repo_name=repo_name)) @HasRepoPermissionAllDecorator('repository.admin') - def delete_perm_user(self, repo_name): + def delete_repo_perm_member(self, repo_name): """ DELETE an existing repository permission user :param repo_name: """ try: - RepoModel().revoke_user_permission(repo=repo_name, - user=request.POST['user_id']) + obj_type = request.POST.get('obj_type') + obj_id = None + if obj_type == 'user': + obj_id = safe_int(request.POST.get('user_id')) + elif obj_type == 'user_group': + obj_id = safe_int(request.POST.get('user_group_id')) + + if obj_type == 'user': + RepoModel().revoke_user_permission(repo=repo_name, user=obj_id) + elif obj_type == 'user_group': + RepoModel().revoke_users_group_permission( + repo=repo_name, group_name=obj_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()) - h.flash(_('An error occurred during deletion of repository user'), - category='error') - raise HTTPInternalServerError() - - @HasRepoPermissionAllDecorator('repository.admin') - def delete_perm_users_group(self, repo_name): - """ - DELETE an existing repository permission user group - - :param repo_name: - """ - - try: - RepoModel().revoke_users_group_permission( - repo=repo_name, group_name=request.POST['users_group_id'] - ) - Session().commit() - except Exception: - log.error(traceback.format_exc()) - h.flash(_('An error occurred during deletion of repository' - ' user groups'), + h.flash(_('An error occurred during revoking of permission'), category='error') raise HTTPInternalServerError() diff -r 7e3d89d9d3a2 -r 25dbbdae3ed9 rhodecode/controllers/admin/repos_groups.py --- a/rhodecode/controllers/admin/repos_groups.py Mon Apr 08 22:47:35 2013 +0200 +++ b/rhodecode/controllers/admin/repos_groups.py Mon Apr 08 23:49:08 2013 +0200 @@ -294,49 +294,41 @@ return redirect(url('edit_repos_group', group_name=group_name)) @HasReposGroupPermissionAnyDecorator('group.admin') - def delete_repos_group_user_perm(self, group_name): + def delete_repo_group_perm_member(self, group_name): """ DELETE an existing repository group permission user :param group_name: """ try: + obj_type = request.POST.get('obj_type') + obj_id = None + if obj_type == 'user': + obj_id = safe_int(request.POST.get('user_id')) + elif obj_type == 'user_group': + obj_id = safe_int(request.POST.get('user_group_id')) + if not c.rhodecode_user.is_admin: - if c.rhodecode_user.user_id == safe_int(request.POST['user_id']): + if obj_type == 'user' and c.rhodecode_user.user_id == obj_id: msg = _('Cannot revoke permission for yourself as admin') h.flash(msg, category='warning') raise Exception('revoke admin permission on self') recursive = str2bool(request.POST.get('recursive', False)) - ReposGroupModel().delete_permission( - repos_group=group_name, obj=request.POST['user_id'], - obj_type='user', recursive=recursive - ) + if obj_type == 'user': + ReposGroupModel().delete_permission( + repos_group=group_name, obj=obj_id, + obj_type='user', recursive=recursive + ) + elif obj_type == 'user_group': + ReposGroupModel().delete_permission( + repos_group=group_name, obj=obj_id, + obj_type='users_group', recursive=recursive + ) + Session().commit() except Exception: log.error(traceback.format_exc()) - h.flash(_('An error occurred during deletion of group user'), - category='error') - raise HTTPInternalServerError() - - @HasReposGroupPermissionAnyDecorator('group.admin') - def delete_repos_group_users_group_perm(self, group_name): - """ - DELETE an existing repository group permission user group - - :param group_name: - """ - - try: - recursive = str2bool(request.POST.get('recursive', False)) - ReposGroupModel().delete_permission( - repos_group=group_name, obj=request.POST['users_group_id'], - obj_type='users_group', recursive=recursive - ) - Session().commit() - except Exception: - log.error(traceback.format_exc()) - h.flash(_('An error occurred during deletion of group' - ' user groups'), + h.flash(_('An error occurred during revoking of permission'), category='error') raise HTTPInternalServerError() diff -r 7e3d89d9d3a2 -r 25dbbdae3ed9 rhodecode/controllers/admin/users_groups.py --- a/rhodecode/controllers/admin/users_groups.py Mon Apr 08 22:47:35 2013 +0200 +++ b/rhodecode/controllers/admin/users_groups.py Mon Apr 08 23:49:08 2013 +0200 @@ -295,7 +295,7 @@ Session().commit() except Exception: log.error(traceback.format_exc()) - h.flash(_('An error occurred during deletion of group user'), + h.flash(_('An error occurred during revoking of permission'), category='error') raise HTTPInternalServerError() diff -r 7e3d89d9d3a2 -r 25dbbdae3ed9 rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js Mon Apr 08 22:47:35 2013 +0200 +++ b/rhodecode/public/js/rhodecode.js Mon Apr 08 23:49:08 2013 +0200 @@ -368,6 +368,20 @@ } /** + * turns objects into GET query string + */ +var toQueryString = function(o) { + if(typeof o !== 'object') { + return false; + } + var _p, _qs = []; + for(_p in o) { + _qs.push(encodeURIComponent(_p) + '=' + encodeURIComponent(o[_p])); + } + return _qs.join('&'); +}; + +/** * Partial Ajax Implementation * * @param url: defines url to make partial request @@ -441,17 +455,6 @@ // Set special header for ajax == HTTP_X_PARTIAL_XHR YUC.initHeader('X-PARTIAL-XHR',true); - var toQueryString = function(o) { - if(typeof o !== 'object') { - return false; - } - var _p, _qs = []; - for(_p in o) { - _qs.push(encodeURIComponent(_p) + '=' + encodeURIComponent(o[_p])); - } - return _qs.join('&'); - }; - var sUrl = url; var callback = { success: success, @@ -2035,7 +2038,38 @@ YUD.insertAfter(el, last_node); } } +function ajaxActionRevokePermission(url, obj_id, obj_type, field_id, extra_data) { + var callback = { + success: function (o) { + var tr = YUD.get(String(field_id)); + tr.parentNode.removeChild(tr); + }, + failure: function (o) { + alert(_TM['Failed to remoke permission'] + ": " + o.status); + }, + }; + query_params = { + '_method': 'delete' + } + // put extra data into POST + if (extra_data !== undefined && (typeof extra_data === 'object')){ + for(k in extra_data){ + query_params[k] = extra_data[k]; + } + } + if (obj_type=='user'){ + query_params['user_id'] = obj_id; + query_params['obj_type'] = 'user'; + } + else if (obj_type=='user_group'){ + query_params['user_group_id'] = obj_id; + query_params['obj_type'] = 'user_group'; + } + + var request = YAHOO.util.Connect.asyncRequest('POST', url, callback, + toQueryString(query_params)); +}; /* Multi selectors */ var MultiSelectWidget = function(selected_id, available_id, form_id){ diff -r 7e3d89d9d3a2 -r 25dbbdae3ed9 rhodecode/templates/admin/repos/repo_edit_perms.html --- a/rhodecode/templates/admin/repos/repo_edit_perms.html Mon Apr 08 22:47:35 2013 +0200 +++ b/rhodecode/templates/admin/repos/repo_edit_perms.html Mon Apr 08 23:49:08 2013 +0200 @@ -87,29 +87,10 @@