Support IPA
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 26 Jun 2022 18:51:10 +0000 (20:51 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 26 Jun 2022 18:51:10 +0000 (20:51 +0200)
org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java
org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java

index 9ab179c6e700defb44836c7bbe4761fe4d826fbf..a0decc04affe791b268666ea4b40cc1aaa2556cc 100644 (file)
@@ -34,6 +34,7 @@ import org.argeo.cms.ux.widgets.DefaultTabularPart;
 import org.argeo.cms.ux.widgets.HierarchicalPart;
 import org.argeo.osgi.useradmin.UserDirectory;
 import org.argeo.util.directory.HierarchyUnit;
+import org.argeo.util.directory.ldap.IpaUtils;
 import org.argeo.util.naming.LdapAttrs;
 import org.argeo.util.naming.LdapObjs;
 import org.eclipse.jface.window.Window;
@@ -84,13 +85,18 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                                List<HierarchyUnit> visible = new ArrayList<>();
                                if (parent != null) {
                                        for (HierarchyUnit hu : parent.getDirectHierarchyUnits(true)) {
-                                               if (CurrentUser.implies(CmsRole.userAdmin, hu.getContext())) {
+                                               if (CurrentUser.implies(CmsRole.userAdmin, hu.getContext()) //
+                                               ) // IPA
+                                               {
                                                        visible.add(hu);
                                                }
                                        }
                                } else {
                                        for (UserDirectory directory : cmsUserManager.getUserDirectories()) {
-                                               if (CurrentUser.implies(CmsRole.userAdmin, directory.getContext())) {
+                                               if (CurrentUser.implies(CmsRole.userAdmin, directory.getContext()) //
+                                                               || CurrentUser.implies(CmsRole.userAdmin,
+                                                                               IpaUtils.IPA_ACCOUNTS_RDN + "," + directory.getContext())) // IPA
+                                               {
                                                        visible.add(directory);
                                                }
 
@@ -114,13 +120,24 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                        protected List<Content> asList(HierarchyUnit hu) {
                                List<Content> roles = new ArrayList<>();
                                UserDirectory ud = (UserDirectory) hu.getDirectory();
-                               for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) {
-                                       if (!directChild.isFunctional()) {
-                                               for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) {
-                                                       Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r);
-                                                       // if (r instanceof Person || r instanceof Organization)
-                                                       if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), LdapObjs.organization.qName()))
-                                                               roles.add(content);
+                               if (ud.getRealm().isPresent()) {
+                                       for (Role r : ud.getHierarchyUnitRoles(ud, null, true)) {
+                                               Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r);
+                                               // if (r instanceof Person || r instanceof Organization)
+                                               if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), LdapObjs.organization.qName()))
+                                                       roles.add(content);
+                                       }
+
+                               } else {
+                                       for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) {
+                                               if (!directChild.isFunctional()) {
+                                                       for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) {
+                                                               Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r);
+                                                               // if (r instanceof Person || r instanceof Organization)
+                                                               if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(),
+                                                                               LdapObjs.organization.qName()))
+                                                                       roles.add(content);
+                                                       }
                                                }
                                        }
                                }
index 17dc29bd2c5d45b0bd7abc41e19f0cda1dfadb5f..6fa991d0dc89350c26df1f7c6b1e68fc62da67a3 100644 (file)
@@ -116,7 +116,10 @@ public class PersonUiProvider implements CmsUiProvider {
                EditableText text = new EditableText(parent, SWT.SINGLE | SWT.FLAT);
                text.setLayoutData(CmsSwtUtils.fillWidth());
                text.setStyle(SuiteStyle.simpleInput);
-               text.setText(context.attr(attr.qName()));
+               String txt = context.attr(attr.qName());
+               if (txt == null) // FIXME understand why email is not found in IPA
+                       txt = "";
+               text.setText(txt);
                text.setMouseListener(new MouseAdapter() {
 
                        @Override