SLING-2069 PW reset through administrator is not possible.
Following the jackrabbit model, members of the UserAdmin group can set the password of other users.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1099482 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/usermanager-ui/src/main/resources/libs/sling/user/update_body.html.esp b/usermanager-ui/src/main/resources/libs/sling/user/update_body.html.esp
index ed2665a..77733ec 100644
--- a/usermanager-ui/src/main/resources/libs/sling/user/update_body.html.esp
+++ b/usermanager-ui/src/main/resources/libs/sling/user/update_body.html.esp
@@ -22,7 +22,6 @@
var canRemove = privilegesInfo.canRemove(currentSession, authorizable.getID());
var canUpdateMembers = privilegesInfo.canUpdateGroupMembers(currentSession, authorizable.getID());
var valueMap = resource.adaptTo(Packages.org.apache.sling.api.resource.ValueMap);
-var isMe = authorizable.getID().equals(request.getRemoteUser());
var rb = request.getResourceBundle("org.apache.sling.usermgr.Resources", null);
@@ -158,7 +157,30 @@
</div>
<% } /*endif(canRemove) */ %>
-<% if (isMe) { %>
+<%
+var canChangePwd = false;
+if (canEdit) {
+ var isMe = authorizable.getID().equals(request.getRemoteUser());
+ if (isMe) {
+ //a user can always change their own password
+ canChangePwd = true;
+ } else {
+ if ("admin".equals(request.getRemoteUser())) {
+ canChangePwd = true;
+ } else {
+ //if the current user is a member of the UserAdmin group, then allow changing the password of other users.
+ var currentUserRes = request.getResourceResolver().resolve("/system/userManager/user/" + request.getRemoteUser());
+ var currentUserAuthorizable = currentUserRes.adaptTo(Packages.org.apache.jackrabbit.api.security.user.Authorizable);
+
+ var userAdminRes = request.getResourceResolver().resolve("/system/userManager/group/UserAdmin");
+ var group = userAdminRes.adaptTo(Packages.org.apache.jackrabbit.api.security.user.Group);
+ if (group) {
+ canChangePwd = group.isMember(currentUserAuthorizable);
+ }
+ }
+ }
+}
+if (canChangePwd) { %>
<div class="ui-widget ui-widget-content ui-corner-all usermgmt-body" id="update-password-body" >
<h3 class="ui-widget-header ui-corner-all usermgmt-header"><%=rb.getString("header.change.password")%></h3>
@@ -177,11 +199,12 @@
<fieldset>
<input type="hidden" value="UTF-8" name="_charset_" />
<input id="pwdRedirect" type="hidden" name=":redirect" value="<%=request.contextPath%><%=resource.path %>.html" />
-
+ <% if (isMe) { %>
<div class="prop-line ui-helper-clearfix">
<label for="oldPwd" accesskey="o"><%=propLabel("oldPwd")%>:</label>
<input id="oldPwd" type="password" name="oldPwd" value=''/>
</div>
+ <% } %>
<div class="prop-line ui-helper-clearfix">
<label for="newPwd" accesskey="p"><%=propLabel("newPwd")%>:</label>
@@ -200,4 +223,4 @@
</fieldset>
</form>
</div>
-<% } /*endif (isme)*/ %>
+<% } /*endif (canChangePwd)*/ %>