added UI support for managing user permissions

This commit is contained in:
Axel Uhl committed 2014-12-01 16:56:10 +01:00
1 parent ebfb80479b
commit 6a8f4d4c89
9 files changed
+98 -7

No files matched your search

@@ -26,6 +26,7 @@ import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.controls.listedit.StringListEditorComposite;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.security.shared.DefaultPermissions;
import com.sap.sse.security.shared.DefaultRoles;
import com.sap.sse.security.shared.UserManagementException;
import com.sap.sse.security.ui.client.IconResources;
@@ -48,6 +49,7 @@ public class UserDetailsView extends FlowPanel {
private final Label usernameLabel;
private final Label emailLabel;
private final StringListEditorComposite rolesEditor;
private final StringListEditorComposite permissionsEditor;
private final VerticalPanel accountPanels;
private UserDTO user;
@@ -60,12 +62,16 @@ public class UserDetailsView extends FlowPanel {
for (DefaultRoles defaultRole : DefaultRoles.values()) {
defaultRoleNames.add(defaultRole.getRolename());
}
List<String> defaultPermissionNames = new ArrayList<>();
for (DefaultPermissions defaultPermission : DefaultPermissions.values()) {
defaultPermissionNames.add(defaultPermission.getPermissionname());
}
rolesEditor = new StringListEditorComposite(user==null?Collections.<String>emptySet():user.getRoles(), stringMessages, IconResources.INSTANCE.remove(), defaultRoleNames,
stringMessages.enterRoleName());
rolesEditor.addValueChangeHandler(new ValueChangeHandler<Iterable<String>>() {
@Override
public void onValueChange(ValueChangeEvent<Iterable<String>> event) {
Iterable<String> newRoleList = event.getValue();
final Iterable<String> newRoleList = event.getValue();
final UserDTO selectedUser = UserDetailsView.this.user;
userManagementService.setRolesForUser(selectedUser.getName(), newRoleList, new MarkedAsyncCallback<SuccessInfo>(
new AsyncCallback<SuccessInfo>() {
@@ -79,6 +85,7 @@ public class UserDetailsView extends FlowPanel {
if (!result.isSuccessful()) {
Window.alert(stringMessages.errorUpdatingRoles(selectedUser.getName(), result.getMessage()));
} else {
selectedUser.setRoles(newRoleList);
if (userService.getCurrentUser().getName().equals(selectedUser.getName())) {
// if the current user's roles changed, update the user object in the user service and notify others
userService.updateUser(/* notify other instances */ true);
@@ -88,6 +95,35 @@ public class UserDetailsView extends FlowPanel {
}));
}
});
permissionsEditor = new StringListEditorComposite(user==null?Collections.<String>emptySet():user.getPermissions(), stringMessages, IconResources.INSTANCE.remove(), defaultPermissionNames,
stringMessages.enterPermissionName());
permissionsEditor.addValueChangeHandler(new ValueChangeHandler<Iterable<String>>() {
@Override
public void onValueChange(ValueChangeEvent<Iterable<String>> event) {
final Iterable<String> newPermissionList = event.getValue();
final UserDTO selectedUser = UserDetailsView.this.user;
userManagementService.setPermissionsForUser(selectedUser.getName(), newPermissionList, new MarkedAsyncCallback<SuccessInfo>(
new AsyncCallback<SuccessInfo>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(stringMessages.errorUpdatingPermissions(selectedUser.getName(), caught.getMessage()));
}
@Override
public void onSuccess(SuccessInfo result) {
if (!result.isSuccessful()) {
Window.alert(stringMessages.errorUpdatingPermissions(selectedUser.getName(), result.getMessage()));
} else {
selectedUser.setPermissions(newPermissionList);
if (userService.getCurrentUser().getName().equals(selectedUser.getName())) {
// if the current user's permissions changed, update the user object in the user service and notify others
userService.updateUser(/* notify other instances */ true);
}
}
}
}));
}
});
usernameLabel = new Label();
emailLabel = new Label();
final Button changeEmail = new Button(stringMessages.edit());
@@ -131,6 +167,7 @@ public class UserDetailsView extends FlowPanel {
decoratorPanel.setWidget(fp);
this.add(decoratorPanel);
this.add(rolesEditor);
this.add(permissionsEditor);
updateUser(user, userManagementService);
}
@@ -203,6 +240,7 @@ public class UserDetailsView extends FlowPanel {
accountPanels.add(accountPanelDecorator);
}
rolesEditor.setValue(user.getRoles(), /* fireEvents */ false);
permissionsEditor.setValue(user.getPermissions(), /* fireEvents */ false);
}
}
@@ -45,7 +45,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages {
String add();
String edit();
String errorUpdatingRoles(String username, String message);
String errorUpdatingPermissions(String name, String message);
String enterRoleName();
String enterPermissionName();
String errorCreatingUser(String username, String message);
String signedUpSuccessfully(String username);
String unknownErrorCreatingUser(String username);
@@ -69,6 +71,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages {
String failedToSignIn();
String emailValidationUnsuccessful(String username);
String roles();
String permissions();
String signInWith();
String generalWelcome();
String newUser();
@@ -38,7 +38,9 @@ remove=Remove
add=Add
edit=Edit
errorUpdatingRoles=Error updating roles for user {0}: {1}
errorUpdatingPermissions=Error updating permissions for user {0}: {1}
enterRoleName=Enter role name...
enterPermissionName=Enter permission name...
errorCreatingUser=Error signing up with username {0}: {1}
signedUpSuccessfully=Successfully signed up user {0}. Please check you e-mails to validate your e-mail account.
unknownErrorCreatingUser=Unknown error trying to sign up user with name {0}. Perhaps another user with that name already exists.
@@ -62,6 +64,7 @@ successfullyResetPassword=Successfully reset password for user {0}. e-Mail has b
failedToSignIn=Failed to sign in. Check your credentials.
emailValidationUnsuccessful=Validation of e-mail address for user {0} failed. Did you really use the latest validation code?
roles=Roles
permissions=Permissions
signInWith=Sign in with...
generalWelcome=Welcome!
newUser=New here?
@@ -38,7 +38,9 @@ remove=Löschen
add=Hinzufügen
edit=Bearbeiten
errorUpdatingRoles=Fehler beim Aktualisieren der Rollen des Benutzers {0}: {1}
errorUpdatingPermissions=Fehler beim Aktualisieren der Berechtigungen des Benutzers {0}: {1}
enterRoleName=Rollennamen eingeben...
enterPermissionName=Berechtigungsnamen eingeben...
errorCreatingUser=Fehler beim Anlegen des Benutzers mit Namen {0}: {1}
signedUpSuccessfully=Benutzer {0} erfolgreich angelegt. Bitte e-Mails pr�fen, um e-Mail-Adresse zu validieren.
unknownErrorCreatingUser=Unbekannter Fehler beim Versuch, den Benutzer mit dem Namen {0} anzulegen. M�glicherweise existiert ein Benutzer gleichen Namens bereits.
@@ -62,6 +64,7 @@ successfullyResetPassword=Passwort für Benutzer {0} erfolgreich zurückgesetzt.
failedToSignIn=Anmeldung fehlgeschlagen. Zugangsdaten überprüfen.
emailValidationUnsuccessful=Validierung der e-Mail-Adresse für Benutzer {0} fehlgeschlagen. Handelte es sich wirklich um den zuletzt ausgestellten Validierungs-Code?
roles=Rollen
permissions=Berechtigungen
signInWith=Anmelden mit...
generalWelcome=Herzlich Willkommen.
newUser=Neuer Benutzer?
@@ -68,6 +68,9 @@ public class EditProfileEntryPoint implements EntryPoint {
rolesPanel.add(new Label(stringMessages.roles()));
final Label rolesLabel = new Label();
rolesPanel.add(rolesLabel);
rolesPanel.add(new Label(stringMessages.permissions()));
final Label permissionsLabel = new Label();
rolesPanel.add(permissionsLabel);
fp.add(rolesPanel);
final Label emailLabel = new Label(stringMessages.email());
fp.add(emailLabel);
@@ -116,6 +119,7 @@ public class EditProfileEntryPoint implements EntryPoint {
nameText.setText(user.getName());
emailText.setText(user.getEmail());
rolesLabel.setText(user.getRoles().toString());
permissionsLabel.setText(user.getPermissions().toString());
}
}
});
@@ -290,6 +290,7 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U
}
userDTO = new UserDTO(user.getName(), user.getEmail(), user.isEmailValidated(), accountDTOs);
userDTO.addRoles(user.getRoles());
userDTO.addPermissions(user.getPermissions());
return userDTO;
}
@@ -12,6 +12,7 @@ public class UserDTO implements IsSerializable {
private String email;
private List<AccountDTO> accounts;
private Set<String> roles = new HashSet<>();
private Set<String> permissions = new HashSet<>();
private boolean emailValidated;
UserDTO() {} // for serialization only
@@ -34,11 +35,33 @@ public class UserDTO implements IsSerializable {
public boolean hasRole(String role) {
return roles.contains(role);
}
public void addRoles(Iterable<String> roles) {
Util.addAll(roles, this.roles);
}
public void setRoles(Iterable<String> newRoleList) {
this.roles.clear();
Util.addAll(newRoleList, this.roles);
}
public Iterable<String> getPermissions() {
return permissions;
}
public boolean hasPermission(String permission) {
return permissions.contains(permission);
}
public void addPermissions(Iterable<String> permissions) {
Util.addAll(permissions, this.permissions);
}
public void setPermissions(Iterable<String> newPermissionList) {
this.permissions.clear();
Util.addAll(newPermissionList, this.permissions);
}
public List<AccountDTO> getAccounts() {
return accounts;
}
@@ -50,4 +73,5 @@ public class UserDTO implements IsSerializable {
public boolean isEmailValidated() {
return emailValidated;
}
}