diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/role/js/role.js b/web/pgadmin/browser/server_groups/servers/roles/templates/role/js/role.js index 4a0237b74..1b73536bd 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/templates/role/js/role.js +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/role/js/role.js @@ -297,7 +297,22 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backform) { dialogHelp: '{{ url_for('help.static', filename='role_dialog.html') }}', label: '{{ _('Login/Group Role') }}', hasSQL: true, - canDrop: true, + canDrop: function(node, item) { + var treeData = this.getTreeNodeHierarchy(item), + server = treeData['server']; + /* + To Drop a role: + 1) If Role we are deleting is superuser then User must be superuser + 2) And for non-superuser roles User must have Create Role permission + */ + + // Role you are trying to drop is Superuser ? + if(node.is_superuser) { + return server.connected && server.user.is_superuser; + } + // For non super users + return server.connected && server.user.can_create_role; + }, hasDepends: true, node_label: function(r) { return r.label; diff --git a/web/pgadmin/browser/templates/browser/js/node.js b/web/pgadmin/browser/templates/browser/js/node.js index 94da24e61..c2de003d5 100644 --- a/web/pgadmin/browser/templates/browser/js/node.js +++ b/web/pgadmin/browser/templates/browser/js/node.js @@ -478,11 +478,11 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, pgBrowser, Backform) { }, // Delete the selected object delete_obj: function(args, item) { - var input = args || {'url':'drop'}; - obj = this, - t = pgBrowser.tree, - i = input.item || item || t.selected(), - d = i && i.length == 1 ? t.itemData(i) : undefined; + var input = args || {'url':'drop'}, + obj = this, + t = pgBrowser.tree, + i = input.item || item || t.selected(), + d = i && i.length == 1 ? t.itemData(i) : undefined; if (!d) return;