X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fparts%2FUserMainPage.java;h=b08a082b09a27161f729937f2bd7dc10abdd66d2;hb=f782539a48e6d4779767c5a511c25df1b9078667;hp=ab8ea321664a384e70bc1d60b32589cebd792b71;hpb=a1d862e4ef6221ebc91fcccea688d66504020365;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java index ab8ea3216..b08a082b0 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java @@ -20,20 +20,21 @@ import java.util.Iterator; import java.util.List; import org.argeo.ArgeoException; +import org.argeo.cms.auth.AuthConstants; +import org.argeo.cms.util.useradmin.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; import org.argeo.jcr.ArgeoNames; import org.argeo.osgi.useradmin.LdifName; import org.argeo.security.ui.admin.SecurityAdminImages; -import org.argeo.security.ui.admin.internal.UiAdminUtils; -import org.argeo.security.ui.admin.internal.UserAdminConstants; import org.argeo.security.ui.admin.internal.UserAdminWrapper; import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener; import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener; import org.argeo.security.ui.admin.internal.providers.CommonNameLP; import org.argeo.security.ui.admin.internal.providers.DomainNameLP; import org.argeo.security.ui.admin.internal.providers.RoleIconLP; +import org.argeo.security.ui.admin.internal.providers.UserFilter; import org.argeo.security.ui.admin.internal.providers.UserNameLP; import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener; import org.eclipse.jface.action.Action; @@ -54,9 +55,12 @@ import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; @@ -95,12 +99,13 @@ public class UserMainPage extends FormPage implements ArgeoNames { ScrolledForm form = mf.getForm(); Composite body = form.getBody(); GridLayout mainLayout = new GridLayout(); + // mainLayout.marginRight = 10; body.setLayout(mainLayout); User user = editor.getDisplayedUser(); appendOverviewPart(body, user); // Remove to ability to force the password for his own user. The user // must then use the change pwd feature - if (!UiAdminUtils.isCurrentUser(user)) + if (!UserAdminUtils.isCurrentUser(user)) appendPasswordPart(body, user); appendMemberOfPart(body, user); } @@ -114,22 +119,21 @@ public class UserMainPage extends FormPage implements ArgeoNames { body.setLayout(new GridLayout(2, false)); final Text distinguishedName = createLT(tk, body, "User Name", - UiAdminUtils.getProperty(user, LdifName.uid.name())); + UserAdminUtils.getProperty(user, LdifName.uid.name())); distinguishedName.setEnabled(false); final Text commonName = createLT(tk, body, "Common Name", - UiAdminUtils.getProperty(user, LdifName.cn.name())); + UserAdminUtils.getProperty(user, LdifName.cn.name())); commonName.setEnabled(false); final Text firstName = createLT(tk, body, "First name", - UiAdminUtils - .getProperty(user, UserAdminConstants.KEY_FIRSTNAME)); + UserAdminUtils.getProperty(user, LdifName.givenName.name())); final Text lastName = createLT(tk, body, "Last name", - UiAdminUtils.getProperty(user, UserAdminConstants.KEY_LASTNAME)); + UserAdminUtils.getProperty(user, LdifName.sn.name())); final Text email = createLT(tk, body, "Email", - UiAdminUtils.getProperty(user, LdifName.mail.name())); + UserAdminUtils.getProperty(user, LdifName.mail.name())); // create form part (controller) AbstractFormPart part = new SectionPart((Section) body.getParent()) { @@ -138,7 +142,8 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new MainInfoListener(this); + listener = editor.new MainInfoListener(parent.getDisplay(), + this); userAdminWrapper.addListener(listener); } @@ -151,30 +156,28 @@ public class UserMainPage extends FormPage implements ArgeoNames { @SuppressWarnings("unchecked") public void commit(boolean onSave) { // TODO Sanity checks (mail validity...) - user.getProperties().put(UserAdminConstants.KEY_FIRSTNAME, + user.getProperties().put(LdifName.givenName.name(), firstName.getText()); - user.getProperties().put(UserAdminConstants.KEY_LASTNAME, - lastName.getText()); + user.getProperties() + .put(LdifName.sn.name(), lastName.getText()); user.getProperties().put(LdifName.cn.name(), commonName.getText()); user.getProperties().put(LdifName.mail.name(), email.getText()); - // Enable common name ? - // editor.setProperty(UserAdminConstants.KEY_CN, - // email.getText()); super.commit(onSave); } @Override public void refresh() { - distinguishedName.setText(UiAdminUtils.getProperty(user, + distinguishedName.setText(UserAdminUtils.getProperty(user, LdifName.uid.name())); - commonName.setText(UiAdminUtils.getProperty(user, + commonName.setText(UserAdminUtils.getProperty(user, LdifName.cn.name())); - firstName.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_FIRSTNAME)); - lastName.setText(UiAdminUtils.getProperty(user, - UserAdminConstants.KEY_LASTNAME)); - email.setText(LdifName.mail.name()); + firstName.setText(UserAdminUtils.getProperty(user, + LdifName.givenName.name())); + lastName.setText(UserAdminUtils.getProperty(user, + LdifName.sn.name())); + email.setText(UserAdminUtils.getProperty(user, + LdifName.mail.name())); refreshFormTitle(user); super.refresh(); } @@ -250,22 +253,29 @@ public class UserMainPage extends FormPage implements ArgeoNames { Composite body = (Composite) section.getClient(); body.setLayout(EclipseUiUtils.noSpaceGridLayout()); + boolean isAdmin = UserAdminUtils.isUserInRole(AuthConstants.ROLE_ADMIN); + // Displayed columns List columnDefs = new ArrayList(); columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain Name", - 120)); - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 300)); + 200)); + // Only show technical DN to administrators + if (isAdmin) + columnDefs.add(new ColumnDefinition(new UserNameLP(), + "Distinguished Name", 120)); // Create and configure the table final LdifUsersTable userViewerCmp = new MyUserTableViewer(body, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user); userViewerCmp.setColumnDefinitions(columnDefs); - userViewerCmp.populate(true, false); + if (isAdmin) + userViewerCmp.populateWithStaticFilters(false, false); + else + userViewerCmp.populate(true, false); GridData gd = EclipseUiUtils.fillAll(); gd.heightHint = 300; userViewerCmp.setLayoutData(gd); @@ -286,7 +296,8 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new GroupChangeListener(this); + listener = editor.new GroupChangeListener(parent.getDisplay(), + this); userAdminWrapper.addListener(listener); } @@ -312,21 +323,47 @@ public class UserMainPage extends FormPage implements ArgeoNames { } private class MyUserTableViewer extends LdifUsersTable { - private static final long serialVersionUID = 8467999509931900367L; + private static final long serialVersionUID = 2653790051461237329L; + + private Button showSystemRoleBtn; private final User user; + private final UserFilter userFilter; public MyUserTableViewer(Composite parent, int style, User user) { super(parent, style, true); this.user = user; + userFilter = new UserFilter(); + userFilter.setShowSystemRole(false); + } + + protected void populateStaticFilters(Composite staticFilterCmp) { + staticFilterCmp.setLayout(new GridLayout()); + showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK); + showSystemRoleBtn.setText("Show system roles"); + showSystemRoleBtn.addSelectionListener(new SelectionAdapter() { + private static final long serialVersionUID = -7033424592697691676L; + + @Override + public void widgetSelected(SelectionEvent e) { + userFilter.setShowSystemRole(showSystemRoleBtn + .getSelection()); + refresh(); + } + }); } @Override protected List listFilteredElements(String filter) { List users = (List) editor.getFlatGroups(null); + List filteredUsers = new ArrayList(); if (users.contains(user)) users.remove(user); - return users; + userFilter.setSearchText(filter); + for (User user : users) + if (userFilter.select(null, null, user)) + filteredUsers.add(user); + return filteredUsers; } } @@ -348,7 +385,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } }); - String tooltip = "Remove " + UiAdminUtils.getUsername(user) + String tooltip = "Remove " + UserAdminUtils.getUsername(user) + " from the below selected groups"; Action action = new RemoveMembershipAction(userViewer, user, tooltip, SecurityAdminImages.ICON_REMOVE_DESC); @@ -382,7 +419,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { // StringBuilder builder = new StringBuilder(); while (it.hasNext()) { Group currGroup = it.next(); - // String groupName = UiAdminUtils.getUsername(currGroup); + // String groupName = UserAdminUtils.getUsername(currGroup); // builder.append(groupName).append("; "); groups.add(currGroup); } @@ -457,7 +494,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { // LOCAL HELPERS private void refreshFormTitle(User group) { getManagedForm().getForm().setText( - UiAdminUtils.getProperty(group, LdifName.cn.name())); + UserAdminUtils.getProperty(group, LdifName.cn.name())); } /** Appends a section with a title */