taylor 2004/12/22 14:59:40 Modified: applications/security/src/java/org/apache/jetspeed/portlets/security/users UserDetailsPortlet.java UserBrowserPortlet.java applications/security/src/webapp/WEB-INF/security/users user-browser.jsp user-details.jsp Log: implemented http://nagoya.apache.org/jira/browse/JS2-175 Revision Changes Path 1.2 +73 -4 jakarta-jetspeed-2/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java Index: UserDetailsPortlet.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- UserDetailsPortlet.java 22 Dec 2004 17:50:09 -0000 1.1 +++ UserDetailsPortlet.java 22 Dec 2004 22:59:40 -0000 1.2 @@ -39,8 +39,10 @@ import org.apache.jetspeed.portlets.security.users.JetspeedUserBean.StringAttribute; import org.apache.jetspeed.profiler.Profiler; import org.apache.jetspeed.profiler.rules.PrincipalRule; +import org.apache.jetspeed.security.Group; import org.apache.jetspeed.security.GroupManager; import org.apache.jetspeed.security.PasswordCredential; +import org.apache.jetspeed.security.Role; import org.apache.jetspeed.security.RoleManager; import org.apache.jetspeed.security.User; import org.apache.jetspeed.security.UserManager; @@ -86,6 +88,13 @@ private final String TAB_PROFILE = "user_profile"; private final String TAB_CREDENTIAL = "user_credential"; + /** the id of the roles control */ + private static final String ROLES_CONTROL = "jetspeedRoles"; + + /** the id of the groups control */ + private static final String GROUPS_CONTROL = "jetspeedGroups"; + + private UserManager userManager; private RoleManager roleManager; private GroupManager groupManager; @@ -182,12 +191,72 @@ JetspeedUserBean bean = new JetspeedUserBean(user); request.setAttribute(VIEW_USER, bean); if (selectedTab.getId().equals(TAB_ROLE)) - { - request.setAttribute(VIEW_ROLES, getRoles(userName)); + { + request.setAttribute(VIEW_ROLES, getRoles(userName)); + + // check for refresh on roles list + String refreshRoles = (String)PortletMessaging.consume(request, "roles", "refresh"); + List roles = null; + if (refreshRoles == null) + { + roles = (List) request.getPortletSession().getAttribute(ROLES_CONTROL); + } + + // build the roles control and provide it to the view + try + { + if (roles == null) + { + roles = new LinkedList(); + Iterator fullRoles = roleManager.getRoles(""); + while (fullRoles.hasNext()) + { + Role role = (Role)fullRoles.next(); + roles.add(role.getPrincipal().getName()); + } + request.getPortletSession().setAttribute(ROLES_CONTROL, roles); + } + } + catch (SecurityException se) + { + throw new PortletException(se); + } + request.setAttribute(ROLES_CONTROL, roles); + } else if (selectedTab.getId().equals(TAB_GROUP)) { - request.setAttribute(VIEW_GROUPS, getGroups(userName)); + request.setAttribute(VIEW_GROUPS, getGroups(userName)); + + // check for refresh on groups list + String refreshGroups = (String)PortletMessaging.consume(request, "groups", "refresh"); + List groups = null; + if (refreshGroups == null) + { + groups = (List) request.getPortletSession().getAttribute(GROUPS_CONTROL); + } + + // build the groups control and provide it to the view + try + { + if (groups == null) + { + groups = new LinkedList(); + Iterator fullGroups = groupManager.getGroups(""); + while (fullGroups.hasNext()) + { + Group group = (Group)fullGroups.next(); + groups.add(group.getPrincipal().getName()); + } + request.getPortletSession().setAttribute(GROUPS_CONTROL, groups); + } + } + catch (SecurityException se) + { + throw new PortletException(se); + } + request.setAttribute(GROUPS_CONTROL, groups); + } else if (selectedTab.getId().equals(TAB_PROFILE)) { 1.2 +50 -3 jakarta-jetspeed-2/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserBrowserPortlet.java Index: UserBrowserPortlet.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserBrowserPortlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- UserBrowserPortlet.java 22 Dec 2004 17:50:10 -0000 1.1 +++ UserBrowserPortlet.java 22 Dec 2004 22:59:40 -0000 1.2 @@ -17,6 +17,7 @@ import java.io.IOException; import java.security.Principal; +import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -32,6 +33,7 @@ import javax.security.auth.Subject; import org.apache.jetspeed.portlets.security.SecurityResources; +import org.apache.jetspeed.profiler.Profiler; import org.apache.jetspeed.security.Role; import org.apache.jetspeed.security.RoleManager; import org.apache.jetspeed.security.SecurityException; @@ -53,12 +55,16 @@ { private UserManager userManager; private RoleManager roleManager; + private Profiler profiler; /** the id of the tree control */ private static final String TREE_CONTROL = "j2_tree"; /** the id of the roles control */ - private static final String ROLES_CONTROL = "jetspeed.roles"; + private static final String ROLES_CONTROL = "jetspeedRoles"; + + /** the id of the rules control */ + private static final String RULES_CONTROL = "jetspeedRules"; /** query filter for selecting users */ private static final String USER_FILTER = ""; @@ -93,6 +99,11 @@ { throw new PortletException("Failed to find the Role Manager on portlet initialization"); } + profiler = (Profiler)getPortletContext().getAttribute(SecurityResources.CPS_PROFILER_COMPONENT); + if (null == profiler) + { + throw new PortletException("Failed to find the Profiler on portlet initialization"); + } } public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException @@ -157,6 +168,22 @@ throw new PortletException(se); } request.setAttribute(ROLES_CONTROL, roles); + + // check for refresh on profiles list + String refreshProfiles = (String)PortletMessaging.consume(request, "profiles", "refresh"); + Collection rules = null; + if (refreshProfiles == null) + { + rules = (Collection) request.getPortletSession().getAttribute(RULES_CONTROL); + } + + // build the profiles control and provide it to the view + if (rules == null) + { + rules = profiler.getRules(); + request.getPortletSession().setAttribute(RULES_CONTROL, rules); + } + request.setAttribute(RULES_CONTROL, rules); super.doView(request, response); } @@ -188,13 +215,31 @@ Iterator users = userManager.getUsers(USER_FILTER); control = buildTree(users, actionRequest.getLocale()); actionRequest.getPortletSession().setAttribute(TREE_CONTROL, control); - selectNode(actionRequest, control, userName); + selectNode(actionRequest, control, userName); + + User user = userManager.getUser(userName); + String role = actionRequest.getParameter(ROLES_CONTROL); + if (!isEmpty(role) && user != null) + { + roleManager.addRoleToUser(userName, role); + } + + String rule = actionRequest.getParameter(RULES_CONTROL); + if (!isEmpty(rule) && user != null) + { + Principal principal = getPrincipal(user.getSubject(), UserPrincipal.class); + profiler.setRuleForPrincipal(principal, profiler.getRule(rule), "page"); + } + } catch (SecurityException se) { PortletMessaging.publish(actionRequest, "user.error", se.getMessage()); } + } + + return; } TreeControl control = (TreeControl) actionRequest.getPortletSession().getAttribute(TREE_CONTROL); @@ -298,5 +343,7 @@ { return getResourceBundle(locale).getString(key); } + + } 1.3 +26 -21 jakarta-jetspeed-2/applications/security/src/webapp/WEB-INF/security/users/user-browser.jsp Index: user-browser.jsp =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/security/src/webapp/WEB-INF/security/users/user-browser.jsp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- user-browser.jsp 22 Dec 2004 19:07:27 -0000 1.2 +++ user-browser.jsp 22 Dec 2004 22:59:40 -0000 1.3 @@ -51,34 +51,39 @@ <input type="password" name="jetspeed.password" size="30" value="" class="portlet-form-label-field"> </td> </tr> - <!-- + + <!-- Select Roles --> <tr colspan="2" align="right"> <td nowrap class="portlet-section-alternate" align="right">Default Role: </td> <td class="portlet-section-body" align="left"> - <select name="jetspeed.role" class="portlet-form-label-field"> - <option value="" <c:if test="! ${selectedPDef}"> selected="true"</c:if> > - <fmt:message key="pam.details.choose_portlet"/> - </option> - <c:forEach var="portletDef" items="${pa.portletDefinitions}"> - <c:set var="pdefName" value="${portletDef.name}"/> - - <%--We must do this since portlet taglib doesn't support expressions--%> - <% String pdefName = (String) pageContext.getAttribute("pdefName"); %> - - <option value="<c:out value="${portletDef.name}"/>" <c:if test="${selectedPDef.name == portletDef.name}">selected="true"</c:if>> - <c:out value="${portletDef.name}"/> + <select name="jetspeedRoles" class="portlet-form-label-field"> + <option value=""/> + <c:forEach var="roleName" items="${jetspeedRoles}"> + <option value="<c:out value='${roleName}'/>" + <c:if test="${roleName == 'user'}">selected="true"</c:if>> + <c:out value="${roleName}"/> </option> - <%-- - <a href="<c:out value="${select_portlet_link}"/>"> - <c:out value="${portletDef.name}" /><br /> - </a> - --%> </c:forEach> - </select> - + </select> </td> </tr> - --> + + <!-- Select Profiling Rules --> + <tr colspan="2" align="right"> + <td nowrap class="portlet-section-alternate" align="right">Profiling Rule: </td> + <td class="portlet-section-body" align="left"> + <select name="jetspeedRules" class="portlet-form-label-field"> + <option value=""/> + <c:forEach var="ruleName" items="${jetspeedRules}"> + <option value="<c:out value='${ruleName}'/>" + <c:if test="${ruleName == 'role-fallback'}">selected="true"</c:if>> + <c:out value="${ruleName}"/> + </option> + </c:forEach> + </select> + </td> + </tr> + </table> <br/> <input type="submit" value="Add User" class="portlet-form-button"/> 1.4 +19 -7 jakarta-jetspeed-2/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp Index: user-details.jsp =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- user-details.jsp 22 Dec 2004 19:07:27 -0000 1.3 +++ user-details.jsp 22 Dec 2004 22:59:40 -0000 1.4 @@ -222,9 +222,15 @@ <td class="portlet-section-alternate" > <fmt:message key="security.rolename"/> </td> - <td class="portlet-section-body" > - <input type="text" name="role_name" value=""/> - </td> + <td class="portlet-section-body" align="left"> + <select name="role_name" class="portlet-form-label-field"> + <c:forEach var="roleName" items="${jetspeedRoles}"> + <option value="<c:out value='${roleName}'/>"> + <c:out value="${roleName}"/> + </option> + </c:forEach> + </select> + </td> </tr> </table> <input type="submit" value="<fmt:message key="security.add"/>" class="portlet-form-button" /> @@ -254,7 +260,7 @@ </td> <td class="portlet-section-body" > <c:out value="${group.principal.name}"/> - </td> + </td> </tr> </c:forEach> </table> @@ -268,9 +274,15 @@ <td class="portlet-section-alternate" > <fmt:message key="security.groupname"/> </td> - <td class="portlet-section-body" > - <input type="text" name="group_name" value=""/> - </td> + <td class="portlet-section-body" align="left"> + <select name="group_name" class="portlet-form-label-field"> + <c:forEach var="groupName" items="${jetspeedGroups}"> + <option value="<c:out value='${groupName}'/>"> + <c:out value="${groupName}"/> + </option> + </c:forEach> + </select> + </td> </tr> </table> <input type="submit" value="<fmt:message key="security.add"/>" class="portlet-form-button" />
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]