diff --git a/airsonic-main/src/main/java/org/airsonic/player/command/UserSettingsCommand.java b/airsonic-main/src/main/java/org/airsonic/player/command/UserSettingsCommand.java index 7b70be6a..2344b78d 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/command/UserSettingsCommand.java +++ b/airsonic-main/src/main/java/org/airsonic/player/command/UserSettingsCommand.java @@ -46,6 +46,7 @@ public class UserSettingsCommand { private List users; private boolean isAdmin; + private boolean isCurrentUser; private boolean isPasswordChange; private boolean isNewUser; private boolean isDeleteUser; @@ -166,6 +167,14 @@ public class UserSettingsCommand { isAdmin = admin; } + public boolean isCurrentUser() { + return isCurrentUser; + } + + public void setCurrentUser(boolean currentUser) { + isCurrentUser = currentUser; + } + public boolean isPasswordChange() { return isPasswordChange; } diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/UserSettingsController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/UserSettingsController.java index b64a623b..073126ea 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/UserSettingsController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/UserSettingsController.java @@ -87,6 +87,7 @@ public class UserSettingsController { UserSettings userSettings = settingsService.getUserSettings(user.getUsername()); command.setTranscodeSchemeName(userSettings.getTranscodeScheme().name()); command.setAllowedMusicFolderIds(Util.toIntArray(getAllowedMusicFolderIds(user))); + command.setCurrentUser(securityService.getCurrentUser(request).getUsername().equals(user.getUsername())); } else { command.setNewUser(true); command.setStreamRole(true); diff --git a/airsonic-main/src/main/java/org/airsonic/player/validator/UserSettingsValidator.java b/airsonic-main/src/main/java/org/airsonic/player/validator/UserSettingsValidator.java index e3d912f6..e44f2bb0 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/validator/UserSettingsValidator.java +++ b/airsonic-main/src/main/java/org/airsonic/player/validator/UserSettingsValidator.java @@ -29,6 +29,8 @@ import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.Validator; +import javax.servlet.http.HttpServletRequest; + /** * Validator for {@link UserSettingsController}. * @@ -41,6 +43,8 @@ public class UserSettingsValidator implements Validator { private SecurityService securityService; @Autowired private SettingsService settingsService; + @Autowired + private HttpServletRequest request; /** * {@inheritDoc} @@ -85,6 +89,16 @@ public class UserSettingsValidator implements Validator { errors.rejectValue("password", "usersettings.passwordnotsupportedforldap"); } + if (securityService.getCurrentUser(request).getUsername().equals(username)) { + // These errors don't need translation since the option isn't exposed to the user + if (command.isDeleteUser()) { + errors.rejectValue("deleteUser", null, "Cannot delete the current user"); + } + if (! command.isAdminRole()) { + errors.rejectValue("adminRole", null, "Cannot remove admin from the current user"); + } + } + } } \ No newline at end of file diff --git a/airsonic-main/src/main/webapp/WEB-INF/jsp/userSettings.jsp b/airsonic-main/src/main/webapp/WEB-INF/jsp/userSettings.jsp index 539a5983..75771d98 100644 --- a/airsonic-main/src/main/webapp/WEB-INF/jsp/userSettings.jsp +++ b/airsonic-main/src/main/webapp/WEB-INF/jsp/userSettings.jsp @@ -63,9 +63,10 @@ - + + @@ -136,11 +137,12 @@
- + +