Make security UI more robust
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 30 Jan 2011 19:34:56 +0000 (19:34 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 30 Jan 2011 19:34:56 +0000 (19:34 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4099 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/eclipse/plugins/org.argeo.security.ui/META-INF/spring/commands.xml
security/eclipse/plugins/org.argeo.security.ui/icons/refresh.png [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/plugin.xml
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/SecurityPerspective.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/RefreshUsersList.java [new file with mode: 0644]
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/SaveArgeoUser.java
security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/editors/ArgeoUserEditor.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/core/ArgeoUserDetails.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java

index 6c042132854f5b6d0af848542a53c5f69c538e05..a89876ad16e06984602696e9045537ba26b112f9 100644 (file)
@@ -16,4 +16,6 @@
                scope="prototype">
                <property name="securityService" ref="securityService" />
        </bean>
+       <bean id="org.argeo.security.ui.refreshUsersList" class="org.argeo.security.ui.commands.RefreshUsersList"
+               scope="prototype" />
 </beans>
diff --git a/security/eclipse/plugins/org.argeo.security.ui/icons/refresh.png b/security/eclipse/plugins/org.argeo.security.ui/icons/refresh.png
new file mode 100644 (file)
index 0000000..bb3803b
Binary files /dev/null and b/security/eclipse/plugins/org.argeo.security.ui/icons/refresh.png differ
index 354c3215e98c69b12801e724dc011e1e12d278e6..3a741cb0906c4c4b98413682411843724bd2ff5d 100644 (file)
             id="org.argeo.security.ui.openChangePasswordDialog"
             name="OpenChangePasswordDialog">
       </command>
+      <command
+            defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+            id="org.argeo.security.ui.refreshUsersList"
+            name="refreshUsersList">
+      </command>
     </extension>
      <extension
          point="org.eclipse.ui.menus">
                   label="Add User"
                   tooltip="Add new user">
             </command>
+            <command
+                  commandId="org.argeo.security.ui.refreshUsersList"
+                  icon="icons/refresh.png"
+                  label="Refresh"
+                  tooltip="Refresh user list">
+            </command>
         </menuContribution>
         <menuContribution
                 allPopups="false"
index bf404ce6f195dab92e799aeb2d2bde9f2eba916c..9187c7830a4c1beeed9a68967cf1a1117b15eb13 100644 (file)
@@ -1,12 +1,24 @@
 package org.argeo.security.ui;
 
+import org.argeo.security.equinox.CurrentUser;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPerspectiveFactory;
 
 public class SecurityPerspective implements IPerspectiveFactory {
+       private String adminRole = "ROLE_ADMIN";
 
        public void createInitialLayout(IPageLayout layout) {
+               if (!CurrentUser.roles().contains(adminRole)) {
+                       MessageDialog
+                                       .openError(Display.getCurrent().getActiveShell(),
+                                                       "Forbidden",
+                                                       "You are not allowed to access this resource.");
+                       return;
+               }
+
                String editorArea = layout.getEditorArea();
                layout.setEditorAreaVisible(true);
                layout.setFixed(false);
@@ -16,7 +28,11 @@ public class SecurityPerspective implements IPerspectiveFactory {
 
                left.addView("org.argeo.security.ui.usersView");
                left.addView("org.argeo.security.ui.rolesView");
-               //left.addView("org.argeo.security.ui.currentUserView");
+               // left.addView("org.argeo.security.ui.currentUserView");
+       }
+
+       public void setAdminRole(String adminRole) {
+               this.adminRole = adminRole;
        }
 
 }
diff --git a/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/RefreshUsersList.java b/security/eclipse/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/commands/RefreshUsersList.java
new file mode 100644 (file)
index 0000000..a385eb9
--- /dev/null
@@ -0,0 +1,20 @@
+package org.argeo.security.ui.commands;
+
+import org.argeo.security.ui.views.UsersView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Refresh the main EBI list. */
+public class RefreshUsersList extends AbstractHandler {
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               UsersView view = (UsersView) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(UsersView.ID);
+               view.refresh();
+               return null;
+       }
+
+}
\ No newline at end of file
index d28761989f1d31187dde4f14ebf50de7bbe2a098..7d817435e46273d74e86262b7f817eb9dd704944 100644 (file)
@@ -3,6 +3,8 @@ package org.argeo.security.ui.commands;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.handlers.HandlerUtil;
@@ -21,7 +23,8 @@ public class SaveArgeoUser extends AbstractHandler {
                        IEditorPart editor = (IEditorPart) iwp;
                        editor.doSave(null);
                } catch (Exception e) {
-                       throw new ExecutionException("Cannot save user", e);
+                       MessageDialog.openError(Display.getDefault().getActiveShell(),
+                                       "Error", "Cannot save user: " + e.getMessage());
                }
                return null;
        }
index 7c0213704a299a6785c7d3695597de491eddee60..1cc41783ca730547b4801bcfc5a39a4aa799529d 100644 (file)
@@ -1,7 +1,5 @@
 package org.argeo.security.ui.editors;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
 import org.argeo.security.ArgeoSecurityService;
 import org.argeo.security.ArgeoUser;
@@ -15,8 +13,6 @@ import org.eclipse.ui.forms.editor.FormEditor;
 
 /** Editor for an Argeo user. */
 public class ArgeoUserEditor extends FormEditor {
-       private final static Log log = LogFactory.getLog(ArgeoUserEditor.class);
-
        public final static String ID = "org.argeo.security.ui.argeoUserEditor";
 
        private ArgeoUser user;
index 2887edaa6182e8afc0392b9b550d7f53dced124d..ee63e24dbd20bbfdea76c64fc1c5062c8e6ce446 100644 (file)
@@ -42,9 +42,9 @@ import org.eclipse.ui.forms.widgets.Section;
 public class DefaultUserMainPage extends FormPage {
        final static String ID = "argeoUserEditor.mainPage";
 
+       private final static Log log = LogFactory.getLog(DefaultUserMainPage.class);
        private final static Image ROLE_CHECKED = SecurityUiPlugin
                        .getImageDescriptor("icons/security.gif").createImage();
-       private final static Log log = LogFactory.getLog(ArgeoUserEditor.class);
 
        private ArgeoUser user;
        private SimpleUserNature simpleNature;
@@ -119,8 +119,8 @@ public class DefaultUserMainPage extends FormPage {
                                simpleNature.setEmail(email.getText());
                                simpleNature.setDescription(description.getText());
                                super.commit(onSave);
-                               if (log.isDebugEnabled())
-                                       log.debug("General part committed");
+                               if (log.isTraceEnabled())
+                                       log.trace("General part committed");
                        }
                };
                firstName.addModifyListener(new FormPartML(part));
@@ -146,8 +146,8 @@ public class DefaultUserMainPage extends FormPage {
                        public void commit(boolean onSave) {
                                // roles have already been modified in editing
                                super.commit(onSave);
-                               if (log.isDebugEnabled())
-                                       log.debug("Role part committed");
+                               if (log.isTraceEnabled())
+                                       log.trace("Role part committed");
                        }
                };
                getManagedForm().addPart(part);
index 6aad5d06ab0e4db6893ba65ebcff993b97217b89..a00bbc2857fa792267f15bed3b456cc48924f593 100644 (file)
@@ -34,6 +34,8 @@ import org.eclipse.ui.part.ViewPart;
 
 /** List all users. */
 public class UsersView extends ViewPart {
+       public final static String ID = "org.argeo.security.ui.usersView";
+
        private TableViewer viewer;
        private ArgeoSecurityService securityService;
 
@@ -80,6 +82,10 @@ public class UsersView extends ViewPart {
                this.simpleNatureType = simpleNatureType;
        }
 
+       public void refresh() {
+               viewer.refresh();
+       }
+
        private class UsersContentProvider implements IStructuredContentProvider {
 
                public Object[] getElements(Object inputElement) {
index 1785357d589a253af76012de5ca29fc11a03fe97..edd7e2bf391359724b6b39ee6a2bb18a35932872 100644 (file)
@@ -26,7 +26,6 @@ import org.apache.commons.logging.LogFactory;
 import org.argeo.security.ArgeoUser;
 import org.argeo.security.SimpleArgeoUser;
 import org.argeo.security.UserNature;
-import org.argeo.security.nature.SimpleUserNature;
 import org.springframework.security.Authentication;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthorityImpl;
index e9718035148db27b8f3aafd706fdc07516664ebd..d6ff69cc23b549632e26edfbe4f93a7ac081b0ad 100644 (file)
@@ -72,7 +72,7 @@ public class DefaultSecurityService implements ArgeoSecurityService {
        }
 
        public void newUser(ArgeoUser user) {
-               user.getUserNatures().clear();
+//             user.getUserNatures().clear();
                argeoSecurity.beforeCreate(user);
                securityDao.create(user);
        }