X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifGroup.java;h=fbc678c52c7589e9484967d3352d48f76a7368b7;hb=e86e3691db8b4a426a6d5fd3cf255dc82fe05fc1;hp=4154d55a74ffec26983324055449d80ff55eebae;hpb=dd3d0d60b62c99810eca8619a376b66dbca5e44d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java index 4154d55a7..fbc678c52 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java @@ -15,13 +15,24 @@ public class LdifGroup extends LdifUser implements Group { // optimisation List directMembers = null; + private String memberAttrName = "member"; + public LdifGroup(LdapName dn, Attributes attributes) { super(dn, attributes); } @Override public boolean addMember(Role role) { - throw new UnsupportedOperationException(); + Attribute member = getAttributes().get(memberAttrName); + if (member != null) { + if (member.contains(role.getName())) + return false; + } else + getAttributes().put(memberAttrName, role.getName()); + directMembers.add(role); + if (role instanceof LdifUser) + ((LdifUser) role).directMemberOf.add(this); + return true; } @Override @@ -31,7 +42,17 @@ public class LdifGroup extends LdifUser implements Group { @Override public boolean removeMember(Role role) { - throw new UnsupportedOperationException(); + Attribute member = getAttributes().get(memberAttrName); + if (member != null) { + if (!member.contains(role.getName())) + return false; + member.remove(role.getName()); + directMembers.remove(role); + if (role instanceof LdifUser) + ((LdifUser) role).directMemberOf.remove(this); + return true; + } else + return false; } @Override @@ -41,7 +62,7 @@ public class LdifGroup extends LdifUser implements Group { else throw new ArgeoUserAdminException("Members have not been loaded."); - // Attribute memberAttribute = getAttributes().get("member"); + // Attribute memberAttribute = getAttributes().get(memberAttrName); // if (memberAttribute == null) // return new Role[0]; // try { @@ -57,24 +78,24 @@ public class LdifGroup extends LdifUser implements Group { // } } - void loadMembers(LdifUserAdmin userAdmin) { - directMembers = new ArrayList(); - for (LdapName ldapName : getMemberNames()) { - LdifUser role; - if (userAdmin.groups.containsKey(ldapName)) - role = userAdmin.groups.get(ldapName); - else if (userAdmin.users.containsKey(ldapName)) - role = userAdmin.users.get(ldapName); - else - throw new ArgeoUserAdminException("No roel found for " - + ldapName); - role.directMemberOf.add(this); - directMembers.add(role); - } - } +// void loadMembers(LdifUserAdmin userAdmin) { +// directMembers = new ArrayList(); +// for (LdapName ldapName : getMemberNames()) { +// LdifUser role; +// if (userAdmin.groups.containsKey(ldapName)) +// role = userAdmin.groups.get(ldapName); +// else if (userAdmin.users.containsKey(ldapName)) +// role = userAdmin.users.get(ldapName); +// else +// throw new ArgeoUserAdminException("No role found for " +// + ldapName); +// role.directMemberOf.add(this); +// directMembers.add(role); +// } +// } List getMemberNames() { - Attribute memberAttribute = getAttributes().get("member"); + Attribute memberAttribute = getAttributes().get(memberAttrName); if (memberAttribute == null) return new ArrayList(); try { @@ -99,4 +120,10 @@ public class LdifGroup extends LdifUser implements Group { public int getType() { return GROUP; } + + public String getMemberAttrName() { + return memberAttrName; + } + + }