Using client-side 'url_for' implementation in the user management

module.
REL-1_X
Ashesh Vashi 2017-06-16 00:16:25 +05:30
parent e65b605912
commit 5c140b3f58
2 changed files with 65 additions and 45 deletions

View File

@ -57,6 +57,18 @@ class UserManagementModule(PgAdminModule):
"""
return self.pref_show_system_objects
def get_exposed_url_endpoints(self):
"""
Returns:
list: URL endpoints for backup module
"""
return [
'user_management.roles', 'user_management.role',
'user_management.update_user', 'user_management.delete_user',
'user_management.create_user', 'user_management.users',
'user_management.user'
]
# Create blueprint for BackupModule class
blueprint = UserManagementModule(
@ -115,8 +127,10 @@ def script():
)
@blueprint.route('/user/', methods=['GET'], defaults={'uid': None})
@blueprint.route('/user/<int:uid>', methods=['GET'])
@blueprint.route(
'/user/', methods=['GET'], defaults={'uid': None}, endpoint='users'
)
@blueprint.route('/user/<int:uid>', methods=['GET'], endpoint='user')
@roles_required('Administrator')
def user(uid):
"""
@ -155,7 +169,7 @@ def user(uid):
)
@blueprint.route('/user/', methods=['POST'])
@blueprint.route('/user/', methods=['POST'], endpoint='create_user')
@roles_required('Administrator')
def create():
"""
@ -208,7 +222,7 @@ def create():
)
@blueprint.route('/user/<int:uid>', methods=['DELETE'])
@blueprint.route('/user/<int:uid>', methods=['DELETE'], endpoint='delete_user')
@roles_required('Administrator')
def delete(uid):
"""
@ -250,7 +264,7 @@ def delete(uid):
return internal_server_error(errormsg=str(e))
@blueprint.route('/user/<int:uid>', methods=['PUT'])
@blueprint.route('/user/<int:uid>', methods=['PUT'], endpoint='update_user')
@roles_required('Administrator')
def update(uid):
"""
@ -301,8 +315,10 @@ def update(uid):
return internal_server_error(errormsg=str(e))
@blueprint.route('/role/', methods=['GET'], defaults={'rid': None})
@blueprint.route('/role/<int:rid>', methods=['GET'])
@blueprint.route(
'/role/', methods=['GET'], defaults={'rid': None}, endpoint='roles'
)
@blueprint.route('/role/<int:rid>', methods=['GET'], endpoint='role')
@roles_required('Administrator')
def role(rid):
"""

View File

@ -1,10 +1,10 @@
// Backup dialog
define([
'sources/gettext', 'jquery', 'underscore', 'underscore.string', 'alertify',
'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'underscore.string', 'alertify',
'pgadmin.browser', 'backbone', 'backgrid', 'backform', 'pgadmin.browser.node',
'backgrid.select.all', 'backgrid.filter'
], function(
gettext, $, _, S, alertify, pgBrowser, Backbone, Backgrid, Backform, pgNode
gettext, url_for, $, _, S, alertify, pgBrowser, Backbone, Backgrid, Backform, pgNode
) {
// if module is already initialized, refer to that.
@ -12,48 +12,47 @@ define([
return pgBrowser.UserManagement;
}
var BASEURL = '{{ url_for('user_management.index')}}',
USERURL = BASEURL + 'user/',
ROLEURL = BASEURL + 'role/',
var USERURL = url_for('user_management.users'),
ROLEURL = url_for('user_management.roles'),
userFilter = function(collection) {
return (new Backgrid.Extension.ClientSideFilter({
collection: collection,
placeholder: _('Filter by email'),
return (new Backgrid.Extension.ClientSideFilter({
collection: collection,
placeholder: _('Filter by email'),
// The model fields to search for matches
fields: ['email'],
// The model fields to search for matches
fields: ['email'],
// How long to wait after typing has stopped before searching can start
wait: 150
}));
},
// How long to wait after typing has stopped before searching can start
wait: 150
}));
},
StringDepCell = Backgrid.StringCell.extend({
initialize: function() {
Backgrid.StringCell.prototype.initialize.apply(this, arguments);
Backgrid.Extension.DependentCell.prototype.initialize.apply(this, arguments);
},
dependentChanged: function () {
this.$el.empty();
initialize: function() {
Backgrid.StringCell.prototype.initialize.apply(this, arguments);
Backgrid.Extension.DependentCell.prototype.initialize.apply(this, arguments);
},
dependentChanged: function () {
this.$el.empty();
var self = this,
model = this.model,
column = this.column,
editable = this.column.get("editable");
var self = this,
model = this.model,
column = this.column,
editable = this.column.get("editable");
this.render();
this.render();
is_editable = _.isFunction(editable) ? !!editable.apply(column, [model]) : !!editable;
setTimeout(function() {
self.$el.removeClass("editor");
if (is_editable){ self.$el.addClass("editable"); }
else { self.$el.removeClass("editable"); }
}, 10);
is_editable = _.isFunction(editable) ? !!editable.apply(column, [model]) : !!editable;
setTimeout(function() {
self.$el.removeClass("editor");
if (is_editable){ self.$el.addClass("editable"); }
else { self.$el.removeClass("editable"); }
}, 10);
this.delegateEvents();
return this;
},
remove: Backgrid.Extension.DependentCell.prototype.remove
});
this.delegateEvents();
return this;
},
remove: Backgrid.Extension.DependentCell.prototype.remove
});
pgBrowser.UserManagement = {
init: function() {
@ -381,8 +380,13 @@ define([
return {
buttons: [{
text: '', key: 112, className: 'btn btn-default pull-left fa fa-lg fa-question',
attrs:{name:'dialog_help', type:'button', label: gettext('Users'),
url: '{{ url_for('help.static', filename='pgadmin_user.html') }}'}
attrs:{
name:'dialog_help', type:'button', label: gettext('Users'),
url: url_for(
'help.static', {
'filename': 'pgadmin_user.html'
})
}
},{
text: gettext('Close'), key: 27, className: 'btn btn-danger fa fa-lg fa-times pg-alertify-button user_management_pg-alertify-button',
attrs:{name:'close', type:'button'}