X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fparts%2FGroupsView.java;h=82f4e1bdd8f27a0f6f1713f159d85e68910846ed;hb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=e6472c67b2309294fcd1d30d147a1b2df92b3e3e;hpb=732542c8de267ed7d6cbb8c66b84cc90c8ad22d7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java index e6472c67b..82f4e1bdd 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java @@ -18,16 +18,22 @@ package org.argeo.security.ui.admin.internal.parts; import java.util.ArrayList; import java.util.List; -import org.argeo.ArgeoException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.cms.CmsException; +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.SecurityAdminPlugin; -import org.argeo.security.ui.admin.internal.ColumnDefinition; -import org.argeo.security.ui.admin.internal.UiAdminUtils; -import org.argeo.security.ui.admin.internal.UserAdminConstants; +import org.argeo.security.ui.admin.internal.UiUserAdminListener; import org.argeo.security.ui.admin.internal.UserAdminWrapper; -import org.argeo.security.ui.admin.internal.UserTableViewer; 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.UserDragListener; import org.argeo.security.ui.admin.internal.providers.UserNameLP; import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener; @@ -36,16 +42,22 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.part.ViewPart; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; -import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; import org.osgi.service.useradmin.UserAdminListener; /** List all groups with filter */ -public class GroupsView extends UsersView implements ArgeoNames { +public class GroupsView extends ViewPart implements ArgeoNames { + private final static Log log = LogFactory.getLog(GroupsView.class); public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".groupsView"; @@ -53,7 +65,7 @@ public class GroupsView extends UsersView implements ArgeoNames { private UserAdminWrapper userAdminWrapper; // UI Objects - private UserTableViewer groupTableViewerCmp; + private LdifUsersTable groupTableViewerCmp; private TableViewer userViewer; private List columnDefs = new ArrayList(); @@ -62,18 +74,29 @@ public class GroupsView extends UsersView implements ArgeoNames { @Override public void createPartControl(Composite parent) { parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); + + boolean isAdmin = UserAdminUtils.isUserInRole(AuthConstants.ROLE_ADMIN); + // Define the displayed columns + columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 26)); columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 300)); + columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200)); + // Only show technical DN to admin + if (isAdmin) + columnDefs.add(new ColumnDefinition(new UserNameLP(), + "Distinguished Name", 300)); // Create and configure the table groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI - | SWT.H_SCROLL | SWT.V_SCROLL, userAdminWrapper.getUserAdmin()); + | SWT.H_SCROLL | SWT.V_SCROLL); groupTableViewerCmp.setColumnDefinitions(columnDefs); - groupTableViewerCmp.populate(true, false); + if (isAdmin) + groupTableViewerCmp.populateWithStaticFilters(false, false); + else + groupTableViewerCmp.populate(true, false); + groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll()); // Links @@ -90,26 +113,61 @@ public class GroupsView extends UsersView implements ArgeoNames { userViewer.addDragSupport(operations, tt, new UserDragListener( userViewer)); + // // Register a useradmin listener + // listener = new UserAdminListener() { + // @Override + // public void roleChanged(UserAdminEvent event) { + // if (userViewer != null && !userViewer.getTable().isDisposed()) + // refresh(); + // } + // }; + // userAdminWrapper.addListener(listener); + // } + // Register a useradmin listener - listener = new UserAdminListener() { - @Override - public void roleChanged(UserAdminEvent event) { - if (userViewer != null && !userViewer.getTable().isDisposed()) - refresh(); - } - }; + listener = new MyUiUAListener(parent.getDisplay()); userAdminWrapper.addListener(listener); } - private class MyUserTableViewer extends UserTableViewer { + private class MyUiUAListener extends UiUserAdminListener { + public MyUiUAListener(Display display) { + super(display); + } + + @Override + public void roleChangedToUiThread(UserAdminEvent event) { + if (userViewer != null && !userViewer.getTable().isDisposed()) + refresh(); + } + } + + private class MyUserTableViewer extends LdifUsersTable { private static final long serialVersionUID = 8467999509931900367L; - private final String[] knownProps = { UserAdminConstants.KEY_UID, - UserAdminConstants.KEY_CN, UserAdminConstants.KEY_DN }; + private boolean showSystemRoles = false; - public MyUserTableViewer(Composite parent, int style, - UserAdmin userAdmin) { - super(parent, style, userAdmin); + private final String[] knownProps = { LdifName.uid.name(), + LdifName.cn.name(), LdifName.dn.name() }; + + public MyUserTableViewer(Composite parent, int style) { + super(parent, style); + } + + protected void populateStaticFilters(Composite staticFilterCmp) { + staticFilterCmp.setLayout(new GridLayout()); + final Button 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) { + showSystemRoles = showSystemRoleBtn.getSelection(); + refresh(); + } + + }); } @Override @@ -118,7 +176,7 @@ public class GroupsView extends UsersView implements ArgeoNames { try { StringBuilder builder = new StringBuilder(); StringBuilder tmpBuilder = new StringBuilder(); - if (UiAdminUtils.notNull(filter)) + if (EclipseUiUtils.notEmpty(filter)) for (String prop : knownProps) { tmpBuilder.append("("); tmpBuilder.append(prop); @@ -127,21 +185,47 @@ public class GroupsView extends UsersView implements ArgeoNames { tmpBuilder.append("*)"); } if (tmpBuilder.length() > 1) { - builder.append("(&(objectclass=groupOfNames)(|"); + builder.append("(&(").append(LdifName.objectClass.name()) + .append("=").append(LdifName.groupOfNames.name()) + .append(")"); + if (!showSystemRoles) + builder.append("(!(").append(LdifName.dn.name()) + .append("=*") + .append(AuthConstants.ROLES_BASEDN) + .append("))"); + builder.append("(|"); builder.append(tmpBuilder.toString()); builder.append("))"); - } else - builder.append("(objectclass=groupOfNames)"); + } else { + if (!showSystemRoles) + builder.append("(&(") + .append(LdifName.objectClass.name()) + .append("=") + .append(LdifName.groupOfNames.name()) + .append(")(!(").append(LdifName.dn.name()) + .append("=*") + .append(AuthConstants.ROLES_BASEDN) + .append(")))"); + else + builder.append("(").append(LdifName.objectClass.name()) + .append("=") + .append(LdifName.groupOfNames.name()) + .append(")"); + + } roles = userAdminWrapper.getUserAdmin().getRoles( builder.toString()); } catch (InvalidSyntaxException e) { - throw new ArgeoException("Unable to get roles with filter: " + throw new CmsException("Unable to get roles with filter: " + filter, e); } List users = new ArrayList(); for (Role role : roles) - // if (role.getType() == Role.GROUP) - users.add((User) role); + if (!users.contains(role)) + users.add((User) role); + else + log.warn("Duplicated role: " + role); + return users; } }