Repository: ambari
Updated Branches:
  refs/heads/trunk 696c708b9 -> 892ea706b


AMBARI-6776. Add default permissions to view API.


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/892ea706
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/892ea706
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/892ea706

Branch: refs/heads/trunk
Commit: 892ea706b87e21fa911536d05bec458cc5488e20
Parents: 696c708
Author: Siddharth Wagle <[email protected]>
Authored: Thu Aug 7 10:28:50 2014 -0700
Committer: Siddharth Wagle <[email protected]>
Committed: Thu Aug 7 10:28:50 2014 -0700

----------------------------------------------------------------------
 .../ViewPermissionResourceProvider.java         | 20 +++++++++++----
 .../ambari/server/orm/dao/PermissionDAO.java    | 27 +++++++++++++++++++-
 .../server/orm/entities/ResourceTypeEntity.java |  6 +++++
 3 files changed, 47 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/892ea706/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
index 547692d..bcbc856 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
@@ -18,6 +18,11 @@
 
 package org.apache.ambari.server.controller.internal;
 
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
 import org.apache.ambari.server.controller.spi.NoSuchResourceException;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -33,11 +38,6 @@ import 
org.apache.ambari.server.orm.entities.ResourceTypeEntity;
 import org.apache.ambari.server.orm.entities.ViewEntity;
 import org.apache.ambari.server.view.ViewRegistry;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * Resource provider for custom view permissions.
  */
@@ -119,6 +119,16 @@ public class ViewPermissionResourceProvider extends 
AbstractResourceProvider {
     Set<Resource> resources    = new HashSet<Resource>();
     Set<String>   requestedIds = getRequestPropertyIds(request, predicate);
 
+    PermissionEntity viewUsePermission = permissionDAO.findViewUsePermission();
+    for (Map<String, Object> propertyMap: getPropertyMaps(predicate)) {
+      Object viewName = propertyMap.get(VIEW_NAME_PROPERTY_ID);
+      Object viewVersion = propertyMap.get(VIEW_VERSION_PROPERTY_ID);
+      if (viewName != null && viewVersion != null) {
+        ViewEntity viewEntity = 
viewRegistry.getDefinition(viewName.toString(), viewVersion.toString());
+        resources.add(toResource(viewUsePermission, 
viewEntity.getResourceType(), viewEntity, requestedIds));
+      }
+    }
+
     for(PermissionEntity permissionEntity : permissionDAO.findAll()){
       ResourceTypeEntity resourceType = permissionEntity.getResourceType();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/892ea706/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java
index 0ab5af8..f88add3 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java
@@ -33,11 +33,23 @@ import java.util.List;
  */
 @Singleton
 public class PermissionDAO {
+
+  /**
+   * Id of built-in VIEW.USE permission.
+   */
+  private static int VIEW_USE_PERMISSION_ID = 4;
+
+  /**
+   * Name of built-in VIEW.USE permission.
+   */
+  private static String VIEW_USE_PERMISSION_NAME = "VIEW.USE";
+
   /**
    * JPA entity manager
    */
   @Inject
   Provider<EntityManager> entityManagerProvider;
+
   @Inject
   DaoUtils daoUtils;
 
@@ -68,12 +80,25 @@ public class PermissionDAO {
    * @param name         the permission name
    * @param resourceType the resource type
    *
-   * @return  a matching permission entity or null
+   * @return a matching permission entity or null
    */
   public PermissionEntity findPermissionByNameAndType(String name, 
ResourceTypeEntity resourceType) {
+    if (name.equals(VIEW_USE_PERMISSION_NAME)) {
+      // VIEW.USE permission should be available for any type of views
+      return findViewUsePermission();
+    }
     TypedQuery<PermissionEntity> query = 
entityManagerProvider.get().createQuery("SELECT p FROM PermissionEntity p WHERE 
p.permissionName=:permissionname AND p.resourceType=:resourcetype", 
PermissionEntity.class);
     query.setParameter("permissionname", name);
     query.setParameter("resourcetype", resourceType);
     return daoUtils.selectSingle(query);
   }
+
+  /**
+   * Find VIEW.USE permission.
+   *
+   * @return a matching permission entity or null
+   */
+  public PermissionEntity findViewUsePermission() {
+    return findById(VIEW_USE_PERMISSION_ID);
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/892ea706/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ResourceTypeEntity.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ResourceTypeEntity.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ResourceTypeEntity.java
index 1fdb737..0bcc6ab 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ResourceTypeEntity.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ResourceTypeEntity.java
@@ -120,5 +120,11 @@ public class ResourceTypeEntity {
     result = 31 * result + (name != null ? name.hashCode() : 0);
     return result;
   }
+
+  @Override
+  public String toString() {
+    return "ResourceTypeEntity [id=" + id + ", name=" + name + "]";
+  }
+
 }
 

Reply via email to