Compare commits
2 Commits
acb96dc1c6
...
6b57a0c5e5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b57a0c5e5 | ||
|
|
0f005ca130 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -93,3 +93,4 @@ coverage/
|
||||
*.bak
|
||||
*.tmpdata/*.mv.db
|
||||
src/main/frontend/generated/
|
||||
/data/*.mv.db
|
||||
|
||||
Binary file not shown.
@@ -18,37 +18,37 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Route(value = "admin/users", layout = MainLayout.class)
|
||||
@PageTitle("Benutzerverwaltung")
|
||||
@Route(value = "admin/user-management", layout = MainLayout.class)
|
||||
@PageTitle("User Management")
|
||||
@RolesAllowed("ROLE_ADMIN")
|
||||
public class UserAdminView extends VerticalLayout {
|
||||
public class UserManagementView extends VerticalLayout {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
private final Grid<User> userGrid = new Grid<>(User.class, false);
|
||||
private final TextField usernameField = new TextField("Benutzername");
|
||||
private final PasswordField passwordField = new PasswordField("Passwort");
|
||||
private final MultiSelectComboBox<String> rolesField = new MultiSelectComboBox<>("Rollen");
|
||||
private final TextField usernameField = new TextField("Username");
|
||||
private final PasswordField passwordField = new PasswordField("Password");
|
||||
private final MultiSelectComboBox<String> rolesField = new MultiSelectComboBox<>("Roles");
|
||||
|
||||
private final Button saveButton = new Button("Speichern");
|
||||
private final Button deleteButton = new Button("Löschen");
|
||||
private final Button saveButton = new Button("Save");
|
||||
private final Button deleteButton = new Button("Delete");
|
||||
|
||||
private User selectedUser;
|
||||
|
||||
public UserAdminView(UserRepository userRepository, PasswordEncoder passwordEncoder) {
|
||||
public UserManagementView(UserRepository userRepository, PasswordEncoder passwordEncoder) {
|
||||
this.userRepository = userRepository;
|
||||
this.passwordEncoder = passwordEncoder;
|
||||
|
||||
add(new H2("Benutzerverwaltung"));
|
||||
configureGrid();
|
||||
configureForm();
|
||||
refreshGrid();
|
||||
add(new H2("User Management"));
|
||||
setupUserGrid();
|
||||
setupFormLayout();
|
||||
loadUsersToGrid();
|
||||
}
|
||||
|
||||
private void configureGrid() {
|
||||
userGrid.addColumn(User::getUsername).setHeader("Benutzername");
|
||||
userGrid.addColumn(user -> String.join(", ", user.getRoles())).setHeader("Rollen");
|
||||
private void setupUserGrid() {
|
||||
userGrid.addColumn(User::getUsername).setHeader("Username");
|
||||
userGrid.addColumn(user -> String.join(", ", user.getRoles())).setHeader("Roles");
|
||||
userGrid.setSelectionMode(Grid.SelectionMode.SINGLE);
|
||||
userGrid.setWidthFull();
|
||||
|
||||
@@ -64,50 +64,54 @@ public class UserAdminView extends VerticalLayout {
|
||||
add(userGrid);
|
||||
}
|
||||
|
||||
private void configureForm() {
|
||||
private void setupFormLayout() {
|
||||
rolesField.setItems("ROLE_USER", "ROLE_ADMIN");
|
||||
|
||||
saveButton.addClickListener(e -> {
|
||||
if (selectedUser != null) {
|
||||
selectedUser.setUsername(usernameField.getValue());
|
||||
selectedUser.setRoles(rolesField.getValue());
|
||||
if (!passwordField.isEmpty()) {
|
||||
selectedUser.setPassword(passwordEncoder.encode(passwordField.getValue()));
|
||||
}
|
||||
userRepository.save(selectedUser);
|
||||
} else {
|
||||
User newUser = User.builder()
|
||||
.username(usernameField.getValue())
|
||||
.roles(rolesField.getValue())
|
||||
.enabled(true)
|
||||
.locked(false)
|
||||
.password(passwordEncoder.encode(passwordField.getValue()))
|
||||
.build();
|
||||
userRepository.save(newUser);
|
||||
}
|
||||
clearForm();
|
||||
refreshGrid();
|
||||
});
|
||||
|
||||
deleteButton.addClickListener(e -> {
|
||||
if (selectedUser != null) {
|
||||
userRepository.delete(selectedUser);
|
||||
clearForm();
|
||||
refreshGrid();
|
||||
}
|
||||
});
|
||||
saveButton.addClickListener(e -> saveOrUpdateUser());
|
||||
deleteButton.addClickListener(e -> deleteUser());
|
||||
|
||||
HorizontalLayout formLayout = new HorizontalLayout(usernameField, passwordField, rolesField, saveButton, deleteButton);
|
||||
formLayout.setWidthFull();
|
||||
add(formLayout);
|
||||
}
|
||||
|
||||
private void refreshGrid() {
|
||||
private void saveOrUpdateUser() {
|
||||
if (selectedUser != null) {
|
||||
selectedUser.setUsername(usernameField.getValue());
|
||||
selectedUser.setRoles(rolesField.getValue());
|
||||
if (!passwordField.isEmpty()) {
|
||||
selectedUser.setPassword(passwordEncoder.encode(passwordField.getValue()));
|
||||
}
|
||||
userRepository.save(selectedUser);
|
||||
} else {
|
||||
User newUser = User.builder()
|
||||
.username(usernameField.getValue())
|
||||
.roles(rolesField.getValue())
|
||||
.enabled(true)
|
||||
.locked(false)
|
||||
.password(passwordEncoder.encode(passwordField.getValue()))
|
||||
.build();
|
||||
userRepository.save(newUser);
|
||||
}
|
||||
|
||||
resetFormFields();
|
||||
loadUsersToGrid();
|
||||
}
|
||||
|
||||
private void deleteUser() {
|
||||
if (selectedUser != null) {
|
||||
userRepository.delete(selectedUser);
|
||||
resetFormFields();
|
||||
loadUsersToGrid();
|
||||
}
|
||||
}
|
||||
|
||||
private void loadUsersToGrid() {
|
||||
List<User> users = userRepository.findAll();
|
||||
userGrid.setItems(users);
|
||||
}
|
||||
|
||||
private void clearForm() {
|
||||
private void resetFormFields() {
|
||||
selectedUser = null;
|
||||
usernameField.clear();
|
||||
passwordField.clear();
|
||||
Reference in New Issue
Block a user