Author: taylor Date: Thu Feb 18 04:32:58 2016 New Revision: 1731003 URL: http://svn.apache.org/viewvc?rev=1731003&view=rev Log: JS2-1349: Add ability to filter by groups in the user manager. Add filterRoles and filterGroups drop downs to Edit Mode configuration
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/ExtendedWicketPortlet.java Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/AdminPortletWebPage.java portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.java portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementPortlet.java portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/PrincipalDataProvider.java portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/wicket/AbstractAdminWebApplication.java portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.html portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/resources/JetspeedPrincipalManagement.properties portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/jetspeed-portlet.xml portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/portlet.xml Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/AdminPortletWebPage.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/AdminPortletWebPage.java?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/AdminPortletWebPage.java (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/AdminPortletWebPage.java Thu Feb 18 04:32:58 2016 @@ -17,12 +17,6 @@ package org.apache.jetspeed.portlets; -import java.util.Enumeration; - -import javax.portlet.PortletPreferences; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; - import org.apache.commons.lang.BooleanUtils; import org.apache.jetspeed.portlets.wicket.AbstractAdminWebApplication; import org.apache.jetspeed.request.RequestContext; @@ -32,6 +26,11 @@ import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.model.IModel; +import javax.portlet.PortletPreferences; +import javax.portlet.PortletRequest; +import javax.portlet.PortletResponse; +import java.util.Enumeration; + /** * General Portlet functionality provided to Admin Portlets via inheritance in an abstract class. @@ -149,6 +148,11 @@ public abstract class AdminPortletWebPag return ((AbstractAdminWebApplication) getApplication()).getPreferenceValueAsInteger(key); } + public int getPreferenceAsInteger(String key, int defaultValue) + { + return ((AbstractAdminWebApplication) getApplication()).getPreferenceValueAsInteger(key, defaultValue); + } + /** * Delegates the invocation to {@link AbstractAdminWebApplication#getPreferenceValueAsBoolean(String)}. * Please use the corresponding method of {@link AbstractAdminWebApplication} directly. Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/ExtendedWicketPortlet.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/ExtendedWicketPortlet.java?rev=1731003&view=auto ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/ExtendedWicketPortlet.java (added) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/ExtendedWicketPortlet.java Thu Feb 18 04:32:58 2016 @@ -0,0 +1,35 @@ +package org.apache.jetspeed.portlets.security; + +import org.apache.jetspeed.JetspeedActions; +import org.apache.wicket.protocol.http.portlet.WicketPortlet; + +import javax.portlet.PortletException; +import javax.portlet.PortletMode; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; +import javax.portlet.WindowState; +import java.io.IOException; + +/** + * Created by dtaylor on 2/16/16. + */ +public class ExtendedWicketPortlet extends WicketPortlet { + + protected void doDispatch(RenderRequest request, RenderResponse response) throws PortletException, IOException + { + if ( !request.getWindowState().equals(WindowState.MINIMIZED)) + { + PortletMode curMode = request.getPortletMode(); + if (JetspeedActions.EDIT_DEFAULTS_MODE.equals(curMode)) + { + //request.setAttribute(PARAM_EDIT_PAGE, DEFAULT_EDIT_DEFAULTS_PAGE); + doEdit(request, response); + } + else + { + super.doDispatch(request, response); + } + } + + } +} Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.java?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.java (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.java Thu Feb 18 04:32:58 2016 @@ -29,7 +29,6 @@ import org.apache.wicket.markup.html.bas import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.IModel; @@ -53,11 +52,16 @@ import java.util.List; */ public class JetspeedPrincipalManagementEditPortlet extends AdminPortletWebPage { - private String subite; + private String subsite; private String profile; private String role; + private String requiredRole; + private String requiredGroup; + private String filteredRole; + private String filteredGroup; private String templateDir; private String subSiteRoot; + private Integer rowsPerPage; private Logger log = LoggerFactory.getLogger(JetspeedPrincipalManagementEditPortlet.class); IModel getProfileList = new LoadableDetachableModel() { @@ -73,6 +77,45 @@ public class JetspeedPrincipalManagement return getRoles(); } }; + IModel getRoleNamesAndEmpty = new LoadableDetachableModel() + { + protected Object load() + { + List<String> roles = new ArrayList<>(); + roles.add(""); + roles.addAll(getRoles()); + return roles; + } + }; + IModel getGroupNames = new LoadableDetachableModel() + { + protected Object load() + { + return getGroups(); + } + }; + IModel getGroupNamesAndEmpty = new LoadableDetachableModel() + { + protected Object load() + { + List<String> groups = new ArrayList<>(); + groups.add(""); + groups.addAll(getGroups()); + return groups; + } + }; + IModel getGroupNamesAndManagerPrefix = new LoadableDetachableModel() + { + protected Object load() + { + List<String> groups = new ArrayList<>(); + groups.add(""); + groups.add(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX_FLAG); + groups.addAll(getGroups()); + return groups; + } + }; + IModel getSubSites = new LoadableDetachableModel() { protected Object load() @@ -84,23 +127,42 @@ public class JetspeedPrincipalManagement public JetspeedPrincipalManagementEditPortlet() { PortletRequest request = ((AbstractAdminWebApplication) getApplication()).getPortletRequest(); - subite = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.DEFAULT_SUBSITE, ""); + subsite = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.DEFAULT_SUBSITE, ""); profile = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.DEFAULT_PROFILE, ""); role = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.DEFAULT_ROLE, ""); + requiredRole = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.REQUIRED_ROLE, ""); + requiredGroup = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.REQUIRED_GROUP, ""); + filteredRole = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.FILTERED_ROLE, ""); + filteredGroup = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.FILTERED_GROUP, ""); templateDir = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.NEW_USER_TEMPLATE_DIR, ""); subSiteRoot = request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.SUB_SITE_ROOT, ""); + rowsPerPage = Integer.parseInt(request.getPreferences().getValue(JetspeedPrincipalManagementPortlet.ROWS_PER_PAGE, "10")); add(new FeedbackPanel("feedback")); Form userPrefernces = new Form("userPrefernces"); userPrefernces.add(new Label("subsiterootLabel", new ResourceModel("subsiteroot"))); userPrefernces.add(new TextField("subsiteroot", new PropertyModel(this, "subSiteRoot"))); userPrefernces.add(new Label("subsiteLabel", new ResourceModel("default.subsite"))); - userPrefernces.add(new DropDownChoice("defaultSubSite", new PropertyModel(this, "subite"),getSubSites)); + userPrefernces.add(new DropDownChoice("defaultSubSite", new PropertyModel(this, "subsite"),getSubSites)); userPrefernces.add(new Label("templateDirLabel", new ResourceModel("templatedir"))); - userPrefernces.add(new RequiredTextField("templateDir", new PropertyModel(this, "templateDir"))); + //userPrefernces.add(new RequiredTextField("templateDir", new PropertyModel(this, "templateDir"))); + userPrefernces.add(new TextField("templateDir", new PropertyModel(this, "templateDir"))); userPrefernces.add(new Label("profileLabel", new ResourceModel("default.profile"))); userPrefernces.add(new DropDownChoice("profile", new PropertyModel(this, "profile"), getProfileList)); userPrefernces.add(new Label("roleLabel", new ResourceModel("default.role"))); userPrefernces.add(new DropDownChoice("role", new PropertyModel(this, "role"), getRoleNames)); + + userPrefernces.add(new Label("requiredRoleLabel", new ResourceModel("required.role"))); + userPrefernces.add(new DropDownChoice("requiredRole", new PropertyModel(this, "requiredRole"), getRoleNamesAndEmpty)); + userPrefernces.add(new Label("requiredGroupLabel", new ResourceModel("required.group"))); + userPrefernces.add(new DropDownChoice("requiredGroup", new PropertyModel(this, "requiredGroup"), getGroupNamesAndEmpty)); + + userPrefernces.add(new Label("filteredRoleLabel", new ResourceModel("filtered.role"))); + userPrefernces.add(new DropDownChoice("filteredRole", new PropertyModel(this, "filteredRole"), getRoleNamesAndEmpty)); + userPrefernces.add(new Label("filteredGroupLabel", new ResourceModel("filtered.group"))); + userPrefernces.add(new DropDownChoice("filteredGroup", new PropertyModel(this, "filteredGroup"), getGroupNamesAndManagerPrefix)); + + userPrefernces.add(new Label("rowsPerPageLabel", new ResourceModel("rowsPerPage"))); + userPrefernces.add(new TextField("rowsPerPage", new PropertyModel(this, "rowsPerPage"))); userPrefernces.add(new Button("addUserPrefernces", new ResourceModel("common.save")) { @Override @@ -112,14 +174,25 @@ public class JetspeedPrincipalManagement if (log.isDebugEnabled()) { log.debug("Setting default role as " + getRole()); - log.debug("Setting default subsite as " + getSubite()); - log.debug("Setting default profile as " + getSubite()); + log.debug("Setting default subsite as " + getSubsite()); + log.debug("Setting default profile as " + getSubsite()); } request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.DEFAULT_ROLE, getRole()); - request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.DEFAULT_SUBSITE, getSubite()); + request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.DEFAULT_SUBSITE, getSubsite()); request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.DEFAULT_PROFILE, getProfile()); request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.NEW_USER_TEMPLATE_DIR, getTemplateDir()); request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.SUB_SITE_ROOT, getSubSiteRoot()); + + request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.REQUIRED_ROLE, getRequiredRole()); + request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.REQUIRED_GROUP, getRequiredGroup()); + request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.FILTERED_ROLE, getFilteredRole()); + request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.FILTERED_GROUP, getFilteredGroup()); + + int rows = getRowsPerPage(); + if (rows < 1) { + rows = 10; + } + request.getPreferences().setValue(JetspeedPrincipalManagementPortlet.ROWS_PER_PAGE, Integer.toString(rows)); request.getPreferences().store(); if (log.isDebugEnabled()) { @@ -156,20 +229,20 @@ public class JetspeedPrincipalManagement } /** - * @return the subite + * @return the subsite */ - public String getSubite() + public String getSubsite() { - return subite; + return subsite; } /** - * @param subite - * the subite to set + * @param subsite + * the subsite to set */ - public void setSubite(String subite) + public void setSubsite(String subsite) { - this.subite = subite; + this.subsite = subsite; } /** @@ -223,6 +296,38 @@ public class JetspeedPrincipalManagement this.templateDir = templateDir; } + public String getRequiredRole() { + return requiredRole; + } + + public void setRequiredRole(String requiredRole) { + this.requiredRole = requiredRole; + } + + public String getRequiredGroup() { + return requiredGroup; + } + + public void setRequiredGroup(String requiredGroup) { + this.requiredGroup = requiredGroup; + } + + public String getFilteredRole() { + return filteredRole; + } + + public void setFilteredRole(String filteredRole) { + this.filteredRole = filteredRole; + } + + public String getFilteredGroup() { + return filteredGroup; + } + + public void setFilteredGroup(String filteredGroup) { + this.filteredGroup = filteredGroup; + } + /** * @return the subSiteRootr */ @@ -265,6 +370,20 @@ public class JetspeedPrincipalManagement return roleNames; } + private List<String> getGroups() + { + List<String> groupNames = Collections.EMPTY_LIST; + try + { + groupNames = ((AbstractAdminWebApplication) getApplication()).getServiceLocator().getGroupManager().getGroupNames(""); + } + catch (SecurityException e) + { + error(e.getMessage()); + } + return groupNames; + } + private List<String> getSubSites() { List<String> subsites = new ArrayList<String>(); @@ -296,4 +415,13 @@ public class JetspeedPrincipalManagement } return subsites; } + + public Integer getRowsPerPage() { + return rowsPerPage; + } + + public void setRowsPerPage(Integer rowsPerPage) { + this.rowsPerPage = rowsPerPage; + } + } Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementPortlet.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementPortlet.java?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementPortlet.java (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementPortlet.java Thu Feb 18 04:32:58 2016 @@ -32,6 +32,7 @@ import org.apache.jetspeed.portlets.wick import org.apache.jetspeed.profiler.Profiler; import org.apache.jetspeed.profiler.rules.PrincipalRule; import org.apache.jetspeed.profiler.rules.ProfilingRule; +import org.apache.jetspeed.security.GroupManager; import org.apache.jetspeed.security.InvalidNewPasswordException; import org.apache.jetspeed.security.InvalidPasswordException; import org.apache.jetspeed.security.JetspeedPrincipal; @@ -40,6 +41,7 @@ import org.apache.jetspeed.security.Jets import org.apache.jetspeed.security.JetspeedPrincipalType; import org.apache.jetspeed.security.PasswordAlreadyUsedException; import org.apache.jetspeed.security.PasswordCredential; +import org.apache.jetspeed.security.Role; import org.apache.jetspeed.security.RoleManager; import org.apache.jetspeed.security.SecurityAttribute; import org.apache.jetspeed.security.SecurityException; @@ -116,10 +118,15 @@ public class JetspeedPrincipalManagement public static final String DEFAULT_SUBSITE = "defaultSubsite"; public static final String DEFAULT_ROLE = "defaultRole"; public static final String REQUIRED_ROLE = "requiredRole"; + public static final String REQUIRED_GROUP = "requiredGroup"; public static final String DEFAULT_PROFILE = "defaultProfile"; public static final String NEW_USER_TEMPLATE_DIR = "newUserTemplateDirectory"; public static final String SUB_SITE_ROOT = "subsiteRootFolder"; - + public static final String FILTERED_ROLE = "filteredRole"; + public static final String FILTERED_GROUP = "filteredGroup"; + public static final String ROWS_PER_PAGE = "rowsPerPage"; + public static final String GROUP_MANAGER_PREFIX_FLAG = "mgr-*"; + public static final String GROUP_MANAGER_PREFIX = "mgr-"; private static final java.sql.Date MAX_DATE = java.sql.Date.valueOf("2099-01-01"); private String principalParam; @@ -150,16 +157,22 @@ public class JetspeedPrincipalManagement .getJetspeedPrincipalManagerProvider().getPrincipalType( principalParam); - String filteredRole = getPreference("filteredRole", ""); + String filteredRole = getPreference(FILTERED_ROLE, ""); + String filteredGroup = getPreference(FILTERED_GROUP, ""); + UserSubjectPrincipal currentUser = (UserSubjectPrincipal)getPortletRequest().getUserPrincipal(); if (principalParam.equals(JetspeedPrincipalType.USER)) { - principalDataProvider = new PrincipalDataProvider(getManager(), getRoleManager(), getSearchString(), filteredRole, true); + if (!StringUtils.isEmpty(filteredGroup)) { + principalDataProvider = new PrincipalDataProvider(currentUser, getManager(), getGroupManager(), getSearchString(), filteredGroup, false, (RoleManager)getRoleManager()); + } + else { + principalDataProvider = new PrincipalDataProvider(currentUser, getManager(), getRoleManager(), getSearchString(), filteredRole, true, (RoleManager)getRoleManager()); + } } else { - principalDataProvider = new PrincipalDataProvider(getManager(), getSearchString()); + principalDataProvider = new PrincipalDataProvider(currentUser, getManager(), getSearchString()); } - ITab tab = null; tabs = new ArrayList(); group = new WebMarkupContainer("group"); @@ -186,7 +199,9 @@ public class JetspeedPrincipalManagement item.add(editLink); } }; - principalView.setItemsPerPage(10); + Integer rowsPerPage = getPreferenceAsInteger(ROWS_PER_PAGE, 10); + + principalView.setItemsPerPage(rowsPerPage); group.add(principalView); OrderByLink orderLink = new OrderByLink("nameOrderLink", "name", principalDataProvider,VoidCssProvider.getInstance()) @@ -252,8 +267,14 @@ public class JetspeedPrincipalManagement public void setSearchString(String searchString) { - this.searchString = (searchString == null ? "" : searchString.trim()); - principalDataProvider.refresh(getManager(),getRoleManager(),searchString); + this.searchString = (searchString == null ? "" : searchString.trim()); + String filteredGroup = getPreference(FILTERED_GROUP, ""); + if (!StringUtils.isEmpty(filteredGroup)) { + principalDataProvider.refresh(getManager(), getGroupManager(), searchString, (RoleManager)getRoleManager()); + } + else { + principalDataProvider.refresh(getManager(), getRoleManager(), searchString, (RoleManager)getRoleManager()); + } setPrincipal(null); controlPannels(false); } @@ -336,7 +357,13 @@ public class JetspeedPrincipalManagement getPrincipal().setEnabled(isUserEnabled()); getManager().updatePrincipal(principal); setPrincipal(principal); - principalDataProvider.refresh(getManager(),getRoleManager(),getSearchString()); + String filteredGroup = getPreference(FILTERED_GROUP, ""); + if (!StringUtils.isEmpty(filteredGroup)) { + principalDataProvider.refresh(getManager(), getGroupManager(), getSearchString(), (RoleManager)getRoleManager()); + } + else { + principalDataProvider.refresh(getManager(), getRoleManager(), getSearchString(), (RoleManager)getRoleManager()); + } } catch (SecurityException jSx) { @@ -355,7 +382,13 @@ public class JetspeedPrincipalManagement getManager().removePrincipal(principal.getName()); setPrincipal(null); controlPannels(false); - principalDataProvider.refresh(getManager(),getRoleManager(),getSearchString()); + String filteredGroup = getPreference(FILTERED_GROUP, ""); + if (!StringUtils.isEmpty(filteredGroup)) { + principalDataProvider.refresh(getManager(), getGroupManager(), getSearchString(), (RoleManager)getRoleManager()); + } + else { + principalDataProvider.refresh(getManager(), getRoleManager(), getSearchString(), (RoleManager)getRoleManager()); + } } catch (SecurityException e) { @@ -687,10 +720,13 @@ public class JetspeedPrincipalManagement final String defaultRole = preferences.getValue(DEFAULT_ROLE ,""); final String requiredRole = preferences.getValue(REQUIRED_ROLE, ""); + final String requiredGroup = preferences.getValue(REQUIRED_GROUP, ""); final String defaultProfile = preferences.getValue(DEFAULT_PROFILE ,""); final String defaultSubsite = preferences.getValue(DEFAULT_SUBSITE ,""); final String templateFolder = preferences.getValue(NEW_USER_TEMPLATE_DIR, ""); final String subsiteRoot = preferences.getValue(SUB_SITE_ROOT,""); + final String filteredGroup = preferences.getValue(JetspeedPrincipalManagementPortlet.FILTERED_GROUP, ""); + profilingRule = defaultProfile.toString(); add(new FeedbackPanel("feedback")); @@ -722,6 +758,7 @@ public class JetspeedPrincipalManagement JetspeedPrincipal principal = getManager().newPrincipal( getUserName(), false); RoleManager roleManager = ((AbstractAdminWebApplication)getApplication()).getServiceLocator().getRoleManager(); + GroupManager groupManager = ((AbstractAdminWebApplication)getApplication()).getServiceLocator().getGroupManager(); PageManager pageManager = ((AbstractAdminWebApplication) getApplication()).getServiceLocator().getPageManager(); try { @@ -736,7 +773,26 @@ public class JetspeedPrincipalManagement { roleManager.addRoleToUser(getUserName(), requiredRole); } - + + // if using mgr-* filteredGroup, always add the * part of the convention + // for example, if filteredGroup == mgr-engineering, then the 'engineering' group will be auto-added + if (!StringUtils.isEmpty(filteredGroup) && filteredGroup.equals(GROUP_MANAGER_PREFIX_FLAG)) { + UserSubjectPrincipal currentUser = (UserSubjectPrincipal)getPortletRequest().getUserPrincipal(); + List<Role> roles = roleManager.getRolesForUser(currentUser.getName()); + for (Role role : roles) + { + if (role.getName().startsWith(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX)) + { + String targetGroup = role.getName().substring(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX.length()); + groupManager.addUserToGroup(getUserName(), targetGroup); + } + } + } + if(!StringUtils.isEmpty(requiredGroup)) + { + groupManager.addUserToGroup(getUserName(), requiredGroup); + } + Profiler profiler = getServiceLocator().getProfiler(); if (!StringUtils.isEmpty(getProfilingRule())) @@ -828,7 +884,13 @@ public class JetspeedPrincipalManagement { log.error("Failed to update user.", jSx); } - principalDataProvider.refresh(getManager(),getRoleManager(),getSearchString()); + String filteredGroup = getPreference(FILTERED_GROUP, ""); + if (!StringUtils.isEmpty(filteredGroup)) { + principalDataProvider.refresh(getManager(), getGroupManager(), getSearchString(), (RoleManager)getRoleManager()); + } + else { + principalDataProvider.refresh(getManager(), getRoleManager(), getSearchString(), (RoleManager)getRoleManager()); + } } }; userForm.add(newUser); @@ -2061,13 +2123,13 @@ public class JetspeedPrincipalManagement return nameList; } - private void controlPannels(boolean userSelecteed) + private void controlPannels(boolean userSelected) { TabbedPanel panel = (TabbedPanel) get("tabs"); ITab tab; panel.getTabs().clear(); boolean guestUserSelected; - if (userSelecteed) + if (userSelected) { if (principalType.getName().equals(JetspeedPrincipalType.USER)) { @@ -2214,7 +2276,12 @@ public class JetspeedPrincipalManagement { return (JetspeedPrincipalManager) getServiceLocator().getRoleManager(); } - + + private JetspeedPrincipalManager getGroupManager() + { + return (JetspeedPrincipalManager) getServiceLocator().getGroupManager(); + } + private static boolean hasPrincipal(Subject subject, JetspeedPrincipal jp) { Iterator<Principal> principals = subject.getPrincipals().iterator(); Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/PrincipalDataProvider.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/PrincipalDataProvider.java?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/PrincipalDataProvider.java (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/security/PrincipalDataProvider.java Thu Feb 18 04:32:58 2016 @@ -16,24 +16,27 @@ */ package org.apache.jetspeed.portlets.security; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - import org.apache.commons.lang.StringUtils; +import org.apache.jetspeed.security.Group; +import org.apache.jetspeed.security.GroupManager; import org.apache.jetspeed.security.JetspeedPrincipal; import org.apache.jetspeed.security.JetspeedPrincipalManager; import org.apache.jetspeed.security.Role; import org.apache.jetspeed.security.RoleManager; import org.apache.jetspeed.security.SecurityException; +import org.apache.jetspeed.security.UserSubjectPrincipal; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + public class PrincipalDataProvider extends SortableDataProvider<JetspeedPrincipal> implements IDataProvider<JetspeedPrincipal> { @@ -47,18 +50,33 @@ public class PrincipalDataProvider exten private OrderBy order = OrderBy.NAME_ASC; private List<JetspeedPrincipal> principalList = new ArrayList<JetspeedPrincipal>(); private boolean roleFilter = false; + private boolean groupFilter = false; private String filteredRole; + private String filteredGroup; + private UserSubjectPrincipal currentUser; - public PrincipalDataProvider(JetspeedPrincipalManager manager, String search) + public PrincipalDataProvider(UserSubjectPrincipal currentUser, JetspeedPrincipalManager manager, String search) { + this.currentUser = currentUser; refresh(manager, search); } - public PrincipalDataProvider(JetspeedPrincipalManager manager, JetspeedPrincipalManager roleManager, String search, String filteredRole, boolean roleFlter) + public PrincipalDataProvider(UserSubjectPrincipal currentUser, JetspeedPrincipalManager manager, JetspeedPrincipalManager roleOrGroupManager, String search, String filteredRoleOrGroup, boolean isRoleFilter, RoleManager roleManager) { - this.filteredRole = filteredRole; - this.roleFilter = roleFlter; - refresh(manager, roleManager, search); + this.currentUser = currentUser; + if (isRoleFilter) { // can be either role or group filter + this.filteredRole = filteredRoleOrGroup; + this.filteredGroup = ""; + this.roleFilter = true; + this.groupFilter = false; + } + else { + this.filteredGroup = filteredRoleOrGroup; + this.filteredRole = ""; + this.roleFilter = false; + this.groupFilter = true; + } + refresh(manager, roleOrGroupManager, search, roleManager); } public Iterator<? extends JetspeedPrincipal> iterator(int first, int count) @@ -101,11 +119,11 @@ public class PrincipalDataProvider exten principalList = (List<JetspeedPrincipal>) manager.getPrincipals(searchString); } - public void refresh(JetspeedPrincipalManager manager, JetspeedPrincipalManager roleManager, String searchString) + public void refresh(JetspeedPrincipalManager manager, JetspeedPrincipalManager assocManager, String searchString, RoleManager roleManager) { if (roleFilter && !StringUtils.isEmpty(filteredRole)) { - if (roleManager.getPrincipal(filteredRole) == null) + if (assocManager.getPrincipal(filteredRole) == null) { principalList = new ArrayList<JetspeedPrincipal>(); } @@ -117,7 +135,7 @@ public class PrincipalDataProvider exten { try { - List<Role> roles = ((RoleManager) roleManager).getRolesForUser(principal.getName()); + List<Role> roles = ((RoleManager) assocManager).getRolesForUser(principal.getName()); for (Role role : roles) { if (role.getName().equals(filteredRole)) @@ -133,6 +151,58 @@ public class PrincipalDataProvider exten } } } + } + else if (groupFilter && !StringUtils.isEmpty(filteredGroup)) + { + if (!filteredGroup.equals(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX_FLAG) && assocManager.getPrincipal(filteredGroup) == null) + { + principalList = new ArrayList<JetspeedPrincipal>(); + } + else + { + principalList = new ArrayList<JetspeedPrincipal>(); + if (filteredGroup.equals(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX_FLAG) && roleManager != null) { + try { + List<Role> roles = roleManager.getRolesForUser(currentUser.getName()); + for (Role role : roles) + { + if (role.getName().startsWith(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX)) + { + String targetGroup = role.getName().substring(JetspeedPrincipalManagementPortlet.GROUP_MANAGER_PREFIX.length()); + // filter users by target group + List<JetspeedPrincipal> localList = (List<JetspeedPrincipal>) manager.getPrincipals(searchString); + for (JetspeedPrincipal principal : localList) { + List<Group> groups = ((GroupManager) assocManager).getGroupsForUser(principal.getName()); + for (Group group : groups) { + if (group.getName().equals(targetGroup)) { + principalList.add(principal); + break; + } + } + } + } + } + } catch (SecurityException e) { + principalList = new ArrayList<JetspeedPrincipal>(); + } + } + else { + List<JetspeedPrincipal> localList = (List<JetspeedPrincipal>) manager.getPrincipals(searchString); + for (JetspeedPrincipal principal : localList) { + try { + List<Group> groups = ((GroupManager) assocManager).getGroupsForUser(principal.getName()); + for (Group group : groups) { + if (group.getName().equals(filteredGroup)) { + principalList.add(principal); + break; + } + } + } catch (SecurityException e) { + principalList = new ArrayList<JetspeedPrincipal>(); + } + } + } + } } else { Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/wicket/AbstractAdminWebApplication.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/wicket/AbstractAdminWebApplication.java?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/wicket/AbstractAdminWebApplication.java (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/wicket/AbstractAdminWebApplication.java Thu Feb 18 04:32:58 2016 @@ -16,16 +16,6 @@ */ package org.apache.jetspeed.portlets.wicket; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.Principal; - -import javax.portlet.PortletConfig; -import javax.portlet.PortletPreferences; -import javax.portlet.PortletRequest; -import javax.portlet.PortletResponse; -import javax.portlet.RenderResponse; - import org.apache.jetspeed.portlets.JetspeedServiceLocator; import org.apache.wicket.RequestContext; import org.apache.wicket.WicketRuntimeException; @@ -35,6 +25,15 @@ import org.apache.wicket.util.resource.I import org.apache.wicket.util.resource.UrlResourceStream; import org.apache.wicket.util.resource.locator.ResourceStreamLocator; +import javax.portlet.PortletConfig; +import javax.portlet.PortletPreferences; +import javax.portlet.PortletRequest; +import javax.portlet.PortletResponse; +import javax.portlet.RenderResponse; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.Principal; + /** * Abstract Admin Wicket Application * <P> @@ -215,6 +214,12 @@ public abstract class AbstractAdminWebAp return (preferenceValue != null ? Integer.parseInt(preferenceValue) : 0); } + public int getPreferenceValueAsInteger(String key, int defaultValue) + { + String preferenceValue = getPreferenceValue(key); + return (preferenceValue != null ? Integer.parseInt(preferenceValue) : defaultValue); + } + public boolean getPreferenceValueAsBoolean(String key) { String preferenceValue = getPreferenceValue(key); Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.html URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.html?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.html (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/JetspeedPrincipalManagementEditPortlet.html Thu Feb 18 04:32:58 2016 @@ -1,4 +1,5 @@ -<!-- +<?xml version="1.0" encoding="UTF-8"?> +<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. @@ -16,15 +17,13 @@ Author <a href="mailto:vku...@apache.org">Vivek Kumar</a> --> -<?xml version="1.0" encoding="UTF-8"?> - <html xmlns="http://www.w3.org/1999/xhtml" > <div wicket:id="feedback"></div> <form wicket:id="userPrefernces"> - <table cellpadding="0" cellspacing="1" border="1" width="300px"> + <table cellpadding="0" cellspacing="1" border="1" > <tr> <td><span wicket:id="subsiterootLabel"/></td> - <td><input type="text" wicket:id="subsiteroot" class="portlet-form-field-label" /></td> + <td><input type="text" wicket:id="subsiteroot" size="50" class="portlet-form-field-label" /></td> </tr> <tr> <td><span wicket:id="subsiteLabel"/></td> @@ -33,7 +32,7 @@ <tr> <td><span wicket:id="templateDirLabel"/></td> - <td><input type="text" wicket:id="templateDir" class="portlet-form-field-label" /></td> + <td><input type="text" wicket:id="templateDir" size="50" class="portlet-form-field-label" /></td> </tr> <tr> <td><span wicket:id="profileLabel"/></td> @@ -44,7 +43,23 @@ <td><select wicket:id="role"></select></td> </tr> <tr> - <td colspan="2"><input type="submit" wicket:id="addUserPrefernces" /></td> + <td><span wicket:id="requiredRoleLabel"/></td> + <td><select wicket:id="requiredRole"></select></td> + </tr> + <tr> + <td><span wicket:id="filteredRoleLabel"/></td> + <td><select wicket:id="filteredRole"></select></td> + </tr> + <tr> + <td><span wicket:id="filteredGroupLabel"/></td> + <td><select wicket:id="filteredGroup"></select></td> + </tr> + <tr> + <td><span wicket:id="rowsPerPageLabel"/></td> + <td><input wicket:id="rowsPerPage" size="10"/></td> + </tr> + <tr> + <td colspan="2"><input type="submit" wicket:id="addUserPrefernces" /></td> </tr> </table> </form> Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/resources/JetspeedPrincipalManagement.properties URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/resources/JetspeedPrincipalManagement.properties?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/resources/JetspeedPrincipalManagement.properties (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/resources/org/apache/jetspeed/portlets/security/resources/JetspeedPrincipalManagement.properties Thu Feb 18 04:32:58 2016 @@ -75,7 +75,10 @@ default.profile=Default profile default.subsite=Default sub-site subsiteroot =Sub site root templatedir =New User template directory - +rowsPerPage=Rows Per Page +required.role=Required Role +filtered.role=Filtered Role +filtered.group=Filtered Group JetspeedPrincipalManagementPortlet$PrincipalNameValidator=User already exists, cannot add new user chgpwd.error.invalidPassword=Current password invalid chgpwd.error.invalidNewPassword=Invalid new password Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/jetspeed-portlet.xml URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/jetspeed-portlet.xml?rev=1731003&r1=1731002&r2=1731003&view=diff ============================================================================== --- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/jetspeed-portlet.xml (original) +++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/jetspeed-portlet.xml Thu Feb 18 04:32:58 2016 @@ -25,7 +25,7 @@ <dc:title xml:lang="en">Jetspeed-2 Administration Portlets</dc:title> <dc:creator>J2 Team</dc:creator> - <js:metadata name="pa-version">2.2</js:metadata> + <js:metadata name="pa-version">2.3.1</js:metadata> <portlet> <portlet-name>LoginPortlet</portlet-name> --------------------------------------------------------------------- To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org