Introduce delete roles and users
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 31 May 2011 16:47:55 +0000 (16:47 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 31 May 2011 16:47:55 +0000 (16:47 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4551 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/plugins/org.argeo.security.ui.admin/META-INF/spring/commands.xml
security/plugins/org.argeo.security.ui.admin/plugin.xml
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteRole.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteUser.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshRoles.java [new file with mode: 0644]
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/RolesView.java
security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java

index 7f6781cc1e5b4014f39587bfd50450f7f0e33e6a..94a222d0f9089da84f6470429e26f683e68ddeb7 100644 (file)
@@ -8,20 +8,36 @@
                class="org.argeo.security.ui.admin.commands.OpenArgeoUserEditor"
                scope="prototype" />
 
+       <!-- USERS -->
        <bean id="newUser" class="org.argeo.security.ui.admin.commands.NewUser"
                scope="prototype">
                <property name="session" ref="session" />
                <property name="userAdminService" ref="userAdminService" />
        </bean>
 
+       <bean id="refreshUsersList" class="org.argeo.security.ui.admin.commands.RefreshUsersList"
+               scope="prototype">
+               <property name="userAdminService" ref="userAdminService" />
+               <property name="session" ref="session" />
+       </bean>
+
+       <bean id="deleteUser" class="org.argeo.security.ui.admin.commands.DeleteUser"
+               scope="prototype">
+               <property name="userAdminService" ref="userAdminService" />
+       </bean>
+
+       <!-- ROLES -->
+       <bean id="refreshRoles" class="org.argeo.security.ui.admin.commands.RefreshRoles"
+               scope="prototype">
+       </bean>
+
        <bean id="addRole" class="org.argeo.security.ui.admin.commands.AddRole"
                scope="prototype">
                <property name="userAdminService" ref="userAdminService" />
        </bean>
 
-       <bean id="refreshUsersList" class="org.argeo.security.ui.admin.commands.RefreshUsersList"
+       <bean id="deleteRole" class="org.argeo.security.ui.admin.commands.DeleteRole"
                scope="prototype">
                <property name="userAdminService" ref="userAdminService" />
-               <property name="session" ref="session" />
        </bean>
 </beans>
index 67f4092c03d64b07a495968def427394519087e7..1ad3c079fa3909a861c4cafc3969fc9affa19420 100644 (file)
                        name="Username">
                        </commandParameter>
       </command>
+      <command
+            defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+            id="org.argeo.security.ui.admin.refreshUsersList"
+            name="refreshUsersList">
+      </command>
       <command
             defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
             id="org.argeo.security.ui.admin.newUser"
             name="New User">
       </command>
+      <command
+            defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+            id="org.argeo.security.ui.admin.deleteUser"
+            name="deleteUser">
+      </command>
+      <command
+            defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+            id="org.argeo.security.ui.admin.refreshRoles"
+            name="refreshRoles">
+      </command>
       <command
             defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
             id="org.argeo.security.ui.admin.addRole"
       </command>
       <command
             defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
-            id="org.argeo.security.ui.admin.refreshUsersList"
-            name="refreshUsersList">
+            id="org.argeo.security.ui.admin.deleteRole"
+            name="deleteRole">
       </command>
     </extension>
      <extension
          point="org.eclipse.ui.menus">
        <menuContribution
             locationURI="toolbar:org.argeo.security.ui.admin.adminRolesView">
+            <command
+                  commandId="org.argeo.security.ui.admin.deleteRole"
+                  icon="icons/remove.gif"
+                  label="Delete Role"
+                  tooltip="Delete selected roles">
+            </command>
             <command
                   commandId="org.argeo.security.ui.admin.addRole"
                   icon="icons/add.gif"
                   label="Add Role"
                   tooltip="Add new role">
             </command>
+            <command
+                  commandId="org.argeo.security.ui.admin.refreshRoles"
+                  icon="icons/refresh.png"
+                  label="Refresh"
+                  tooltip="Refresh roles">
+            </command>
         </menuContribution>
        <menuContribution
             locationURI="toolbar:org.argeo.security.ui.admin.adminUsersView">
+            <command
+                  commandId="org.argeo.security.ui.admin.deleteUser"
+                  icon="icons/remove.gif"
+                  label="Delete User"
+                  tooltip="Delete selected users">
+            </command>
             <command
                   commandId="org.argeo.security.ui.admin.newUser"
                   icon="icons/add.gif"
diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteRole.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteRole.java
new file mode 100644 (file)
index 0000000..9b1b446
--- /dev/null
@@ -0,0 +1,57 @@
+package org.argeo.security.ui.admin.commands;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.argeo.security.UserAdminService;
+import org.argeo.security.ui.admin.views.RolesView;
+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.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Deletes the selected roles */
+public class DeleteRole extends AbstractHandler {
+       private UserAdminService userAdminService;
+
+       @SuppressWarnings("unchecked")
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection selection = HandlerUtil.getCurrentSelection(event);
+               if (selection.isEmpty())
+                       return null;
+
+               List<String> toDelete = new ArrayList<String>();
+               Iterator<String> it = ((IStructuredSelection) selection).iterator();
+               while (it.hasNext()) {
+                       toDelete.add(it.next());
+               }
+
+               if (!MessageDialog
+                               .openQuestion(
+                                               HandlerUtil.getActiveShell(event),
+                                               "Delete Role",
+                                               "Are you sure that you want to delete "
+                                                               + toDelete
+                                                               + "?\n"
+                                                               + "This may lead to inconsistencies in the application."))
+                       return null;
+
+               for (String role : toDelete) {
+                       userAdminService.deleteRole(role);
+               }
+
+               RolesView view = (RolesView) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(RolesView.ID);
+               view.refresh();
+               return null;
+       }
+
+       public void setUserAdminService(UserAdminService userAdminService) {
+               this.userAdminService = userAdminService;
+       }
+}
\ No newline at end of file
diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteUser.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteUser.java
new file mode 100644 (file)
index 0000000..63a9872
--- /dev/null
@@ -0,0 +1,90 @@
+package org.argeo.security.ui.admin.commands;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.security.UserAdminService;
+import org.argeo.security.ui.admin.views.UsersView;
+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.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Deletes the select user nodes */
+public class DeleteUser extends AbstractHandler {
+       private final static Log log = LogFactory.getLog(DeleteUser.class);
+
+       private UserAdminService userAdminService;
+
+       @SuppressWarnings("unchecked")
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection selection = HandlerUtil.getCurrentSelection(event);
+               if (selection.isEmpty())
+                       return null;
+
+               Map<String, Node> toDelete = new TreeMap<String, Node>();
+               Iterator<Node> it = ((IStructuredSelection) selection).iterator();
+               nodes: while (it.hasNext()) {
+                       Node profileNode = it.next();
+                       try {
+                               String userName = profileNode.getProperty(
+                                               ArgeoNames.ARGEO_USER_ID).getString();
+                               if (userName.equals(profileNode.getSession().getUserID())) {
+                                       log.warn("Cannot delete its own user: " + userName);
+                                       continue nodes;
+                               }
+                               toDelete.put(userName, profileNode);
+                       } catch (RepositoryException e) {
+                               log.warn("Cannot interpred user " + profileNode);
+                       }
+               }
+
+               if (!MessageDialog
+                               .openQuestion(
+                                               HandlerUtil.getActiveShell(event),
+                                               "Delete User",
+                                               "Are you sure that you want to delete users "
+                                                               + toDelete.keySet()
+                                                               + "?\n"
+                                                               + "This may lead to inconsistencies in the application."))
+                       return null;
+
+               for (String username : toDelete.keySet()) {
+                       Session session = null;
+                       try {
+                               Node profileNode = toDelete.get(username);
+                               userAdminService.deleteUser(username);
+                               profileNode.getParent().remove();
+                               session = profileNode.getSession();
+                               session.save();
+                       } catch (RepositoryException e) {
+                               JcrUtils.discardQuietly(session);
+                               throw new ArgeoException("Cannot list users", e);
+                       }
+               }
+
+               userAdminService.synchronize();
+               UsersView view = (UsersView) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(UsersView.ID);
+               view.refresh();
+               return null;
+       }
+
+       public void setUserAdminService(UserAdminService userAdminService) {
+               this.userAdminService = userAdminService;
+       }
+}
\ No newline at end of file
diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshRoles.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshRoles.java
new file mode 100644 (file)
index 0000000..eb30bb4
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.security.ui.admin.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Refreshes the roles view.
+ */
+public class RefreshRoles extends AbstractHandler {
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               return null;
+       }
+
+}
\ No newline at end of file
index 491647a8ddbcbdd5d5bc7a74cd6b16c2ed0d121f..50adb658ab7d26f617cffdf510b728ad6ab8a16b 100644 (file)
@@ -70,6 +70,7 @@ public class RolesView extends ViewPart {
                viewer = new TableViewer(table);
                viewer.setContentProvider(new RolesContentProvider());
                viewer.setLabelProvider(new UsersLabelProvider());
+               getViewSite().setSelectionProvider(viewer);
                viewer.setInput(getViewSite());
        }
 
index 77b718e1262648d25b5c69844780c44411a7e28b..4242436d479a1abadf9bbd782388f6a3bf2b9120 100644 (file)
@@ -53,6 +53,7 @@ public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes,
                viewer.setContentProvider(new UsersContentProvider());
                viewer.setLabelProvider(new UsersLabelProvider());
                viewer.addDoubleClickListener(new ViewDoubleClickListener());
+               getViewSite().setSelectionProvider(viewer);
                viewer.setInput(getViewSite());
        }