From f7254551bdefb51624b4a26940543235e07db48f Mon Sep 17 00:00:00 2001 From: ulrich@undisclosed <ulrich@ulrich-vaio> Date: Sun, 17 May 2020 11:56:42 +0000 Subject: [PATCH] Nutzer loeschen und Dialog zur Bestaetigung --- web/ui/ui.js | 411 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 397 insertions(+), 14 deletions(-) diff --git a/web/ui/ui.js b/web/ui/ui.js index cb2f979..0665ebf 100644 --- a/web/ui/ui.js +++ b/web/ui/ui.js @@ -1,7 +1,31 @@ function um_init() { + $('#user-form').hide(); + $('#nav').hide(); + $('#role-form').hide(); + $('#user-role-form').hide(); $('.user-save-btn').click(um_user_save); + $('.user-cancel-btn').click(um_back_from_new_user); + $('#nutzerliste').click(um_user_list_click); + $('#nutzerLoeschen').click(um_del_user); + $('#nutzerNeu').click(um_new_user); + $('#nutzerLoeschen').prop( "disabled", true ); + $('#nutzerRolleEntziehen').prop( "disabled", true ); + $('#rolleErteilen').prop( "disabled", true ); + $('#rolleErteilen').click(um_grant_role); + $('#nutzerRolleEntziehen').click(um_revoke_role); + $('#neueRolle').click(um_new_role); + $('#rollen').click(um_role_list_click); + $('#nutzerrollen').click(um_user_role_list_click); + $('#userMenu').text('?'); + $('#logout').click(um_apicall_logout); + um_clear_user_form(); + um_apicall_get_user_list(); + um_apicall_get_granted_roles(); + um_apicall_get_login(); } + +/* ----- user functions ------ */ function um_user_save() { var user = um_user_form_lesen(); @@ -9,25 +33,213 @@ if(user.pw != kww) { alert('Kennworte stimmen nicht ueberein.'); } else { - alert('user-save ' + user.id); - um_apicall(self.serialisieren(user)); + um_apicall_create_user(self.serialisieren(user)); } } -function um_apicall(obj) { - var c = 'de.uhilger.um.api.UserMgr'; +function um_del_user() { + var userId = um_get_first_selected_user_id(); + if(userId !== 'none') { + var antwort = confirm("Wollen Sie den Nutzer " + userId + " loeschen?"); + if (antwort === true) { + var user = new User(userId, '-', '-', '-', '-'); + um_apicall_del_user(self.serialisieren(user)); + } + } +} + +/* ----------- role functions ------------ */ + +function um_new_role() { + var roleIsNew = true; + var userId = um_get_first_selected_user_id(); + if(userId === 'none') { + alert('Es wurde kein Benutzer ausgewaehlt.'); + } else { + var answer = prompt("Name der Rolle", ""); + if (answer === null) { + alert("Es wurde Cancel betaetigt."); + } else if(answer !== "") { + um_apicall_grant_role(userId, answer, roleIsNew); + } else { + alert("OK betaetigt, aber Keine Rolle angegeben."); + } + } +} + +function um_grant_role() { + var roleIsNew = false; + var userId = um_get_first_selected_user_id(); + var roleId = um_get_first_selected_role_id(); + if(roleId !== 'none' && userId !== 'none') { + um_apicall_grant_role(userId, roleId, roleIsNew); + } +} + +function um_revoke_role() { + var userId = um_get_first_selected_user_id(); + var roleId = um_get_first_selected_userrole_id(); + if(roleId !== 'none' && userId !== 'none') { + um_apicall_revoke_role(userId, roleId); + } +} + +/* ----------- ui interaction ------------ */ + +function um_user_list_click() { + $('#nav-back-btn').click(um_back_from_roles); + $('#nutzerLoeschen').prop( "disabled", false ); + $('#rollen :selected').prop("selected", false); + var userId = um_get_first_selected_user_id(); + $('#userid').html(userId); + um_apicall_get_user_roles(userId); + $('#user-list-form').hide(); + $('#nav').show(); + $('#role-form').show(); + $('#user-role-form').show(); +} + +function um_new_user() { + $('#nav-back-btn').click(um_back_from_new_user); + $('#user-list-form').hide(); + $('#user-form').show(); + $('#nav').show(); +} + +function um_role_list_click() { + $('#rolleErteilen').prop( "disabled", false ); +} + +function um_user_role_list_click() { + $('#nutzerRolleEntziehen').prop( "disabled", false ); +} + +function um_back_from_roles() { + $('#user-list-form').show(); + $('#nav').hide(); + $('#role-form').hide(); + $('#user-role-form').hide(); +} + +function um_back_from_new_user() { + $('#user-list-form').show(); + $('#nav').hide(); + $('#user-form').hide(); + um_clear_user_form(); +} + +/* ------- ui i/o ------ */ + +function um_user_form_lesen() { + var userId = $('#anmeldename').val(); + var kw = $('#kennwort').val(); + var firstName = $('#vorname').val(); + var lastName = $('#nachname').val(); + var user = new User(userId, kw, firstName, lastName, '-'); + return user; +} + +/* + * BaseLink liefert fuer einfache selects wie die der Nutzerverwaltung + * eine simple Listenfunktion, die auf der JSON-Seite wie folgt + * herauskommt. + * + * {"List":[{"List":[{"String":"USER_NAME"},{"String":"admin"},{"String":"test"}]}]} + * + * Fuer Mustache sieht ein Template dann z.B so aus: + * + * {{#List}} + * {{#List}} + * <option value="{{ String }}">{{ String }}</option>' + * {{/List}} + * {{/List}} + */ +function um_show_user_list(resp) { + $("#nutzerliste").empty(); + var template = $('#tpl-list').html(); + Mustache.parse(template); // optional, speeds up future uses + $("#nutzerliste").append( Mustache.render(template, resp) ); +} + +function um_clear_user_form() { + $('#anmeldename').val(''); + $('#kennwort').val(''); + $('#kennwortw').val(''); +} + +function um_get_first_selected_user_id() { + var userId = 'none'; + var userIds = []; + $('#nutzerliste :selected').each(function(i, selected){ + userIds[i] = $(selected).text(); + }); + if(userIds.length > 0) { + userId = userIds[0]; + } + return userId; +} + +function um_get_first_selected_role_id() { + var roleId = 'none'; + var roleIds = []; + $('#rollen :selected').each(function(i, selected){ + roleIds[i] = $(selected).text(); + }); + if(roleIds.length > 0) { + roleId = roleIds[0]; + } + return roleId; +} + +function um_get_first_selected_userrole_id() { + var roleId = 'none'; + var roleIds = []; + $('#nutzerrollen :selected').each(function(i, selected){ + roleIds[i] = $(selected).text(); + }); + if(roleIds.length > 0) { + roleId = roleIds[0]; + } + return roleId; +} + +function um_show_user_role_list(resp) { + $("#nutzerrollen").empty(); + + var template = $('#tpl-list').html(); + Mustache.parse(template); // optional, speeds up future uses + $("#nutzerrollen").append( Mustache.render(template, resp) ); + + $('#nutzerRolleEntziehen').prop( "disabled", true ); + $('#rolleErteilen').prop( "disabled", true ); +} + +function um_show_role_list(resp) { + $("#rollen").empty(); + + var template = $('#tpl-list').html(); + Mustache.parse(template); // optional, speeds up future uses + $("#rollen").append( Mustache.render(template, resp) ); + + $('#rolleErteilen').prop( "disabled", true ); +} + +/* ---- api calls ----- */ + +function um_apicall_create_user(user) { var m = 'createUser'; - var u = '../api?c=' + c + '&m=' + m; + var u = '../svc/' + m; $.ajax({ url: u, data: { - p: obj + p: user }, type: "POST", dataType : "html", - //success: function( resp ) { - //$('#fehler').html('Antwort: ' + resp); - //}, + success: function( resp ) { + um_apicall_get_user_list(); + um_back_from_new_user(); + }, error: function( xhr, status, errorThrown ) { $('#fehler').html("Error: " + errorThrown + " Status: " + status); }, @@ -37,16 +249,182 @@ }); } -function um_user_form_lesen() { - var userId = $('#anmeldename').val(); - var kw = $('#kennwort').val(); - var user = new User(userId, kw, '-', '-', '-'); - return user; +function um_apicall_del_user(user) { + var m = 'deleteUser'; + var u = '../svc/' + m; + $.ajax({ + url: u, + data: { + p: user + }, + type: "POST", + dataType : "html", + success: function( resp ) { + um_apicall_get_user_list(); + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); } + +function um_apicall_get_user_list() { + var m = 'getUserNameList'; + var u = '../svc/' + m; + $.ajax({ + url: u, + type: "GET", + dataType : "json", + success: function( resp ) { + um_show_user_list(resp); + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); +} + +// http]://example.com/um/api?c=de.uhilger.um.api.UserMgr&m=testmethode +function um_apicall_grant_role(userId, roleName, isNewRole) { + var ur = new UserRole(userId, roleName); + var m = 'grantRole'; + var u = '../svc/' + m; + $.ajax({ + url: u, + data: { + p: self.serialisieren(ur) + }, + type: "POST", + dataType : "html", + success: function( resp ) { + um_apicall_get_user_roles(userId); + if(isNewRole) { + um_apicall_get_granted_roles(); + } + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); +} + +function um_apicall_revoke_role(userId, roleName) { + var ur = new UserRole(userId, roleName); + var m = 'revokeRole'; + var u = '../svc/' + m; + $.ajax({ + url: u, + data: { + p: self.serialisieren(ur) + }, + type: "POST", + dataType : "html", + success: function( resp ) { + um_apicall_get_user_roles(userId); + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); +} + +function um_apicall_get_user_roles(userId) { + var m = 'getUserRoleNames'; + var u = '../svc/' + m + '?p=' + userId; + $.ajax({ + url: u, + type: "GET", + dataType : "json", + success: function( resp ) { + um_show_user_role_list(resp); + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); +} + +function um_apicall_get_granted_roles() { + var m = 'getRoleNamesGranted'; + var u = '../svc/' + m; + $.ajax({ + url: u, + type: "GET", + dataType : "json", + success: function( resp ) { + um_show_role_list(resp); + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); +} + +function um_apicall_get_login() { + var m = '?c=de.uhilger.um.pub.SessionManager&m=getSessionUser'; + var u = '../pub' + m; + $.ajax({ + url: u, + type: "GET", + dataType : "json", + success: function( resp ) { + $('#userMenu').text(resp.UserData.firstName); + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); + +} + +function um_apicall_logout() { + var m = '?c=de.uhilger.um.pub.SessionManager&m=expireSession'; + var u = '../pub' + m; + $.ajax({ + url: u, + type: "GET", + dataType : "text", + success: function( resp ) { + $('#userMenu').text('nicht angemeldet'); + window.location.href = '../logout.html'; + }, + error: function( xhr, status, errorThrown ) { + $('#fehler').html("Error: " + errorThrown + " Status: " + status); + }, + complete: function( xhr, status ) { + //alert( "The request is complete!" ); + } + }); +} + +/* ----- Hilfsfunktionen ----- */ function serialisieren(obj) { return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}'; }; + +/* ----- Objekte ----- */ function User(i, p, fn, ln, em) { this.id = i; @@ -54,4 +432,9 @@ this.firstName = fn; this.lastName = ln; this.email = em; +} + +function UserRole(u, r) { + this.userId = u; + this.role = r; } \ No newline at end of file -- Gitblit v1.9.3