Improve Security
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 28 Jan 2011 15:22:33 +0000 (15:22 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 28 Jan 2011 15:22:33 +0000 (15:22 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4087 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityUiPlugin.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/DefaultUserMainPage.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/UsersView.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/ArgeoSecurityDaoLdap.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/SimpleUserNature.java

index 971affa4b62366a42fa2c86447e44fa3e019dedb..bc05495b4299c2e990e225ea3c2afb5828b1d6f1 100644 (file)
@@ -1,9 +1,5 @@
 package org.argeo.security.ui;
 
-import org.argeo.ArgeoException;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.UserNature;
-import org.argeo.security.nature.SimpleUserNature;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
@@ -61,23 +57,4 @@ public class SecurityUiPlugin extends AbstractUIPlugin {
        public static ImageDescriptor getImageDescriptor(String path) {
                return imageDescriptorFromPlugin(PLUGIN_ID, path);
        }
-
-       /*
-        * SECURITY UTILITIES
-        */
-       public final static SimpleUserNature findSimpleUserNature(ArgeoUser user,
-                       String simpleNatureType) {
-               SimpleUserNature simpleNature = null;
-               if (simpleNatureType != null)
-                       simpleNature = (SimpleUserNature) user.getUserNatures().get(
-                                       simpleNatureType);
-               else
-                       for (UserNature userNature : user.getUserNatures().values())
-                               if (userNature instanceof SimpleUserNature)
-                                       simpleNature = (SimpleUserNature) userNature;
-
-               if (simpleNature == null)
-                       throw new ArgeoException("No simple user nature in user " + user);
-               return simpleNature;
-       }
 }
index 3da89f37c72f515570d13ab615e4b9f5c4d91d4a..9ed5ccaeca948ccff66b1809a84c6ee4153cecc8 100644 (file)
@@ -55,7 +55,7 @@ public class DefaultUserMainPage extends FormPage {
                super(editor, ID, "Main");
                this.securityService = securityService;
                this.user = user;
-               this.simpleNature = SecurityUiPlugin.findSimpleUserNature(user,
+               this.simpleNature = SimpleUserNature.findSimpleUserNature(user,
                                simpleNatureType);
        }
 
index 34feebbe8f722fe8e72bbf7b1875453e768beaf4..6aad5d06ab0e4db6893ba65ebcff993b97217b89 100644 (file)
@@ -99,7 +99,7 @@ public class UsersView extends ViewPart {
                public String getColumnText(Object element, int columnIndex) {
                        String currentUsername = CurrentUser.getUsername();
                        ArgeoUser user = (ArgeoUser) element;
-                       SimpleUserNature simpleNature = SecurityUiPlugin
+                       SimpleUserNature simpleNature = SimpleUserNature
                                        .findSimpleUserNature(user, simpleNatureType);
                        switch (columnIndex) {
                        case 0:
index de2664851a648143fd630569f9208170f496d7b3..67025dc5da3f37f9c7fe0e9c3abcc3f83bd2ed2e 100644 (file)
@@ -49,6 +49,9 @@ public interface ArgeoSecurityDao {
 
        public void deleteRole(String role);
 
+       /** List all users having this role. */
+       public List<ArgeoUser> listUsersInRole(String role);
+
        public Boolean userExists(String username);
 
        public ArgeoUser getUser(String username);
index e6d8274b5b2fe6ba5d21500934407794c34718e0..732ec72c2c8caacf20737344a3e1ffdd4f80d11e 100644 (file)
@@ -16,6 +16,8 @@
 
 package org.argeo.security;
 
+import java.util.List;
+
 /**
  * High level access to the user referential (independent from the underlying
  * storage).
@@ -36,4 +38,8 @@ public interface ArgeoSecurityService {
        public ArgeoSecurityDao getSecurityDao();
 
        public Runnable wrapWithSystemAuthentication(final Runnable runnable);
+       
+       /** List users having this role (except the super user). */
+       public List<ArgeoUser> listUsersInRole(String role);
+
 }
index b9220b2692af7305657593944012b950cc96754c..e9718035148db27b8f3aafd706fdc07516664ebd 100644 (file)
@@ -16,6 +16,9 @@
 
 package org.argeo.security.core;
 
+import java.util.Iterator;
+import java.util.List;
+
 import org.argeo.ArgeoException;
 import org.argeo.security.ArgeoSecurity;
 import org.argeo.security.ArgeoSecurityDao;
@@ -115,6 +118,19 @@ public class DefaultSecurityService implements ArgeoSecurityService {
                };
        }
 
+       public List<ArgeoUser> listUsersInRole(String role) {
+               List<ArgeoUser> lst = securityDao.listUsersInRole(role);
+               Iterator<ArgeoUser> it = lst.iterator();
+               while (it.hasNext()) {
+                       if (it.next().getUsername()
+                                       .equals(argeoSecurity.getSuperUsername())) {
+                               it.remove();
+                               break;
+                       }
+               }
+               return lst;
+       }
+
        public void setArgeoSecurity(ArgeoSecurity argeoSecurity) {
                this.argeoSecurity = argeoSecurity;
        }
index 807875db617328c879d311f6586feff66dffd16c..6aa31bbdc6620ef05dd8e354af0df6a0ca7f9718 100644 (file)
@@ -183,6 +183,26 @@ public class ArgeoSecurityDaoLdap implements ArgeoSecurityDao, InitializingBean
                                });
        }
 
+       @SuppressWarnings("unchecked")
+       public List<ArgeoUser> listUsersInRole(String role) {
+               return (List<ArgeoUser>) ldapTemplate.lookup(
+                               buildGroupDn(convertRoleToGroup(role)), new ContextMapper() {
+                                       public Object mapFromContext(Object ctxArg) {
+                                               DirContextAdapter ctx = (DirContextAdapter) ctxArg;
+                                               String[] userDns = ctx
+                                                               .getStringAttributes(groupMemberAttributeName);
+                                               List<ArgeoUser> lst = new ArrayList<ArgeoUser>();
+                                               for (String userDn : userDns) {
+                                                       DistinguishedName dn = new DistinguishedName(userDn);
+                                                       String username = dn
+                                                                       .getValue(usernameAttributeName);
+                                                       lst.add(createSimpleArgeoUser(getDetails(username)));
+                                               }
+                                               return lst;
+                                       }
+                               });
+       }
+
        public synchronized void update(ArgeoUser user) {
                ArgeoUserDetails argeoUserDetails = new ArgeoUserDetails(user);
                userDetailsManager.updateUser(new ArgeoUserDetails(user));
index 7d7723e33f599df7c320e42b80a3e50750e8814c..a10ac4dbde9dcc002d95721c8d185ea3828fd5f1 100644 (file)
 
 package org.argeo.security.nature;
 
+import org.argeo.ArgeoException;
 import org.argeo.security.AbstractUserNature;
+import org.argeo.security.ArgeoUser;
+import org.argeo.security.UserNature;
 
 public class SimpleUserNature extends AbstractUserNature {
        /**
@@ -63,4 +66,36 @@ public class SimpleUserNature extends AbstractUserNature {
                this.description = description;
        }
 
+       /*
+        * SECURITY UTILITIES
+        */
+       /**
+        * Finds a user nature extending {@link SimpleUserNature} in the provided
+        * user.
+        * 
+        * @param user
+        *            the user to scan
+        * @param simpleNatureType
+        *            the type under which a {@link SimpleUserNature} is registered,
+        *            useful if there are many. can be null.
+        * @return the {@link SimpleUserNature}
+        * @throws ArgeoException
+        *             if no simple user nature was found
+        */
+       public final static SimpleUserNature findSimpleUserNature(ArgeoUser user,
+                       String simpleNatureType) {
+               SimpleUserNature simpleNature = null;
+               if (simpleNatureType != null)
+                       simpleNature = (SimpleUserNature) user.getUserNatures().get(
+                                       simpleNatureType);
+               else
+                       for (UserNature userNature : user.getUserNatures().values())
+                               if (userNature instanceof SimpleUserNature)
+                                       simpleNature = (SimpleUserNature) userNature;
+
+               if (simpleNature == null)
+                       throw new ArgeoException("No simple user nature in user " + user);
+               return simpleNature;
+       }
+
 }