Procházet zdrojové kódy

AMBARI-7776 - Admin View: Users page empty after delete view

tbeerbower před 10 roky
rodič
revize
06f8f87d2e

+ 10 - 0
ambari-server/src/main/java/org/apache/ambari/server/api/services/UserService.java

@@ -128,6 +128,16 @@ public class UserService extends BaseService {
     return handleRequest(headers, null, ui, Request.Type.DELETE, createUserResource(userName));
     return handleRequest(headers, null, ui, Request.Type.DELETE, createUserResource(userName));
   }
   }
 
 
+  /**
+   * Gets the user privilege service
+   */
+  @Path("{userName}/privileges")
+  public PrivilegeService getPrivilegeService(@Context javax.ws.rs.core.Request request,
+                                              @PathParam ("userName") String userName) {
+
+    return new UserPrivilegeService(userName);
+  }
+
   /**
   /**
    * Create a user resource instance.
    * Create a user resource instance.
    *
    *

+ 8 - 0
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/PrincipalEntity.java

@@ -125,6 +125,14 @@ public class PrincipalEntity {
     this.privileges = privileges;
     this.privileges = privileges;
   }
   }
 
 
+  /**
+   * Remove a privilege.
+   *
+   * @param privilege  the privilege entity
+   */
+  public void removePrivilege(PrivilegeEntity privilege) {
+    privileges.remove(privilege);
+  }
 
 
   // ----- Object overrides --------------------------------------------------
   // ----- Object overrides --------------------------------------------------
 
 

+ 14 - 2
ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java

@@ -40,6 +40,7 @@ import org.apache.ambari.server.orm.dao.ViewInstanceDAO;
 import org.apache.ambari.server.orm.entities.GroupEntity;
 import org.apache.ambari.server.orm.entities.GroupEntity;
 import org.apache.ambari.server.orm.entities.MemberEntity;
 import org.apache.ambari.server.orm.entities.MemberEntity;
 import org.apache.ambari.server.orm.entities.PermissionEntity;
 import org.apache.ambari.server.orm.entities.PermissionEntity;
+import org.apache.ambari.server.orm.entities.PrincipalEntity;
 import org.apache.ambari.server.orm.entities.PrivilegeEntity;
 import org.apache.ambari.server.orm.entities.PrivilegeEntity;
 import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
 import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
@@ -547,7 +548,7 @@ public class ViewRegistry {
         }
         }
         List<PrivilegeEntity> instancePrivileges = privilegeDAO.findByResourceId(instanceEntity.getResource().getId());
         List<PrivilegeEntity> instancePrivileges = privilegeDAO.findByResourceId(instanceEntity.getResource().getId());
         for (PrivilegeEntity privilegeEntity : instancePrivileges) {
         for (PrivilegeEntity privilegeEntity : instancePrivileges) {
-          privilegeDAO.remove(privilegeEntity);
+          removePrivilegeEntity(privilegeEntity);
         }
         }
         instanceDAO.remove(instanceEntity);
         instanceDAO.remove(instanceEntity);
         viewEntity.removeInstanceDefinition(instanceName);
         viewEntity.removeInstanceDefinition(instanceName);
@@ -825,7 +826,7 @@ public class ViewRegistry {
 
 
     ViewExternalSubResourceProvider viewExternalSubResourceProvider =
     ViewExternalSubResourceProvider viewExternalSubResourceProvider =
         new ViewExternalSubResourceProvider(externalResourceType, viewDefinition);
         new ViewExternalSubResourceProvider(externalResourceType, viewDefinition);
-    viewDefinition.addResourceProvider(externalResourceType, viewExternalSubResourceProvider );
+    viewDefinition.addResourceProvider(externalResourceType, viewExternalSubResourceProvider);
 
 
     resourceProviders.put(externalResourceType, viewExternalSubResourceProvider);
     resourceProviders.put(externalResourceType, viewExternalSubResourceProvider);
 
 
@@ -1187,6 +1188,17 @@ public class ViewRegistry {
     }
     }
   }
   }
 
 
+  // remove a privilege entity.
+  private void removePrivilegeEntity(PrivilegeEntity privilegeEntity) {
+
+    PrincipalEntity principalEntity = privilegeEntity.getPrincipal();
+    if (principalEntity != null) {
+      principalEntity.removePrivilege(privilegeEntity);
+    }
+
+    privilegeDAO.remove(privilegeEntity);
+  }
+
   // read the view archives.
   // read the view archives.
   private void readViewArchives(boolean systemOnly, boolean useExecutor,
   private void readViewArchives(boolean systemOnly, boolean useExecutor,
                                 String viewNameRegExp, boolean removeUndeployed) {
                                 String viewNameRegExp, boolean removeUndeployed) {

+ 43 - 0
ambari-server/src/test/java/org/apache/ambari/server/orm/entities/PrincipalEntityTest.java

@@ -21,6 +21,9 @@ package org.apache.ambari.server.orm.entities;
 import org.junit.Assert;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Test;
 
 
+import java.util.HashSet;
+import java.util.Set;
+
 /**
 /**
  * PrincipalEntity tests.
  * PrincipalEntity tests.
  */
  */
@@ -44,4 +47,44 @@ public class PrincipalEntityTest {
     entity.setPrincipalType(typeEntity);
     entity.setPrincipalType(typeEntity);
     Assert.assertEquals(typeEntity, entity.getPrincipalType());
     Assert.assertEquals(typeEntity, entity.getPrincipalType());
   }
   }
+
+  @Test
+  public void testSetGetPrivileges() throws Exception {
+
+    Set<PrivilegeEntity> privileges = new HashSet<PrivilegeEntity>();
+    PrivilegeEntity privilegeEntity = new PrivilegeEntity();
+    privilegeEntity.setId(1);
+    privileges.add(privilegeEntity);
+    privilegeEntity = new PrivilegeEntity();
+    privilegeEntity.setId(2);
+    privileges.add(privilegeEntity);
+
+    PrincipalEntity entity = new PrincipalEntity();
+
+    entity.setPrivileges(privileges);
+    Assert.assertEquals(privileges, entity.getPrivileges());
+  }
+
+  @Test
+  public void testRemovePrivilege() throws Exception {
+
+    Set<PrivilegeEntity> privileges = new HashSet<PrivilegeEntity>();
+    PrivilegeEntity privilegeEntity1 = new PrivilegeEntity();
+    privilegeEntity1.setId(1);
+    privileges.add(privilegeEntity1);
+    PrivilegeEntity privilegeEntity2 = new PrivilegeEntity();
+    privilegeEntity2.setId(2);
+    privileges.add(privilegeEntity2);
+
+    PrincipalEntity entity = new PrincipalEntity();
+
+    entity.setPrivileges(privileges);
+
+    entity.removePrivilege(privilegeEntity2);
+
+    privileges = entity.getPrivileges();
+    Assert.assertEquals(1, privileges.size());
+
+    privileges.contains(privilegeEntity1);
+  }
 }
 }

+ 11 - 2
ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java

@@ -62,6 +62,7 @@ import org.apache.ambari.server.orm.dao.UserDAO;
 import org.apache.ambari.server.orm.dao.ViewDAO;
 import org.apache.ambari.server.orm.dao.ViewDAO;
 import org.apache.ambari.server.orm.dao.ViewInstanceDAO;
 import org.apache.ambari.server.orm.dao.ViewInstanceDAO;
 import org.apache.ambari.server.orm.entities.PermissionEntity;
 import org.apache.ambari.server.orm.entities.PermissionEntity;
+import org.apache.ambari.server.orm.entities.PrincipalEntity;
 import org.apache.ambari.server.orm.entities.PrivilegeEntity;
 import org.apache.ambari.server.orm.entities.PrivilegeEntity;
 import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
 import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
@@ -822,6 +823,14 @@ public class ViewRegistryTest {
     PrivilegeEntity privilege2 = createNiceMock(PrivilegeEntity.class);
     PrivilegeEntity privilege2 = createNiceMock(PrivilegeEntity.class);
     List<PrivilegeEntity> privileges = Arrays.asList(privilege1, privilege2);
     List<PrivilegeEntity> privileges = Arrays.asList(privilege1, privilege2);
 
 
+    PrincipalEntity principalEntity = createNiceMock(PrincipalEntity.class);
+
+    expect(privilege1.getPrincipal()).andReturn(principalEntity);
+    expect(privilege2.getPrincipal()).andReturn(principalEntity);
+
+    principalEntity.removePrivilege(privilege1);
+    principalEntity.removePrivilege(privilege2);
+
     expect(privilegeDAO.findByResourceId(3L)).andReturn(privileges);
     expect(privilegeDAO.findByResourceId(3L)).andReturn(privileges);
     privilegeDAO.remove(privilege1);
     privilegeDAO.remove(privilege1);
     privilegeDAO.remove(privilege2);
     privilegeDAO.remove(privilege2);
@@ -829,7 +838,7 @@ public class ViewRegistryTest {
 
 
     handlerList.removeViewInstance(viewInstanceEntity);
     handlerList.removeViewInstance(viewInstanceEntity);
 
 
-    replay(viewInstanceDAO, privilegeDAO, handlerList);
+    replay(viewInstanceDAO, privilegeDAO, handlerList, privilege1, privilege2, principalEntity);
 
 
     registry.addDefinition(viewEntity);
     registry.addDefinition(viewEntity);
     registry.addInstanceDefinition(viewEntity, viewInstanceEntity);
     registry.addInstanceDefinition(viewEntity, viewInstanceEntity);
@@ -839,7 +848,7 @@ public class ViewRegistryTest {
 
 
     Assert.assertEquals(0, viewInstanceDefinitions.size());
     Assert.assertEquals(0, viewInstanceDefinitions.size());
 
 
-    verify(viewInstanceDAO, privilegeDAO, handlerList);
+    verify(viewInstanceDAO, privilegeDAO, handlerList, privilege1, privilege2, principalEntity);
   }
   }
 
 
   @Test
   @Test