You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/02/21 19:12:54 UTC

[airavata] branch group-based-auth updated: Query for access to applications for given permission

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch group-based-auth
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/group-based-auth by this push:
     new a782fd7  Query for access to applications for given permission
a782fd7 is described below

commit a782fd713b6bb5a6df2ab33ac60027f7aa901049
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Feb 20 16:30:32 2018 -0500

    Query for access to applications for given permission
    
    EXEC permission added for users that have access to run the application
    but may not necessary READ or WRITE the application deployment
    description.
---
 .../api/server/handler/AiravataServerHandler.java  | 107 ++++++--
 .../java/org/apache/airavata/api/Airavata.java     | 294 +++++++++++++++++++--
 .../model/group/ResourcePermissionType.java        |   5 +-
 .../apache/airavata/model/group/ResourceType.java  |   5 +-
 .../migrator/airavata/AiravataDataMigrator.java    |   8 +-
 .../airavata-apis/airavata_api.thrift              |   8 +-
 .../group_manager_model.thrift                     |   4 +-
 7 files changed, 370 insertions(+), 61 deletions(-)

diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index 3dc6c71..37cbffc 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -19,7 +19,10 @@
  */
 package org.apache.airavata.api.server.handler;
 
-import org.apache.airavata.accountprovisioning.*;
+import org.apache.airavata.accountprovisioning.ConfigParam;
+import org.apache.airavata.accountprovisioning.SSHAccountManager;
+import org.apache.airavata.accountprovisioning.SSHAccountProvisionerFactory;
+import org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider;
 import org.apache.airavata.api.Airavata;
 import org.apache.airavata.api.airavata_apiConstants;
 import org.apache.airavata.api.server.util.ThriftClientPool;
@@ -42,7 +45,12 @@ import org.apache.airavata.model.appcatalog.accountprovisioning.SSHAccountProvis
 import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription;
 import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule;
 import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription;
-import org.apache.airavata.model.appcatalog.computeresource.*;
+import org.apache.airavata.model.appcatalog.computeresource.CloudJobSubmission;
+import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription;
+import org.apache.airavata.model.appcatalog.computeresource.LOCALSubmission;
+import org.apache.airavata.model.appcatalog.computeresource.ResourceJobManager;
+import org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission;
+import org.apache.airavata.model.appcatalog.computeresource.UnicoreJobSubmission;
 import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference;
 import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile;
 import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference;
@@ -57,14 +65,31 @@ import org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePrefe
 import org.apache.airavata.model.application.io.InputDataObjectType;
 import org.apache.airavata.model.application.io.OutputDataObjectType;
 import org.apache.airavata.model.commons.airavata_commonsConstants;
-import org.apache.airavata.model.credential.store.*;
+import org.apache.airavata.model.credential.store.CredentialOwnerType;
+import org.apache.airavata.model.credential.store.CredentialSummary;
+import org.apache.airavata.model.credential.store.PasswordCredential;
+import org.apache.airavata.model.credential.store.SSHCredential;
+import org.apache.airavata.model.credential.store.SummaryType;
 import org.apache.airavata.model.data.movement.DMType;
-import org.apache.airavata.model.data.movement.*;
+import org.apache.airavata.model.data.movement.GridFTPDataMovement;
+import org.apache.airavata.model.data.movement.LOCALDataMovement;
+import org.apache.airavata.model.data.movement.SCPDataMovement;
+import org.apache.airavata.model.data.movement.UnicoreDataMovement;
 import org.apache.airavata.model.data.replica.DataProductModel;
 import org.apache.airavata.model.data.replica.DataReplicaLocationModel;
-import org.apache.airavata.model.error.*;
-import org.apache.airavata.model.experiment.*;
-import org.apache.airavata.model.group.GroupModel;
+import org.apache.airavata.model.error.AiravataClientException;
+import org.apache.airavata.model.error.AiravataErrorType;
+import org.apache.airavata.model.error.AiravataSystemException;
+import org.apache.airavata.model.error.AuthorizationException;
+import org.apache.airavata.model.error.ExperimentNotFoundException;
+import org.apache.airavata.model.error.InvalidRequestException;
+import org.apache.airavata.model.error.ProjectNotFoundException;
+import org.apache.airavata.model.experiment.ExperimentModel;
+import org.apache.airavata.model.experiment.ExperimentSearchFields;
+import org.apache.airavata.model.experiment.ExperimentStatistics;
+import org.apache.airavata.model.experiment.ExperimentSummaryModel;
+import org.apache.airavata.model.experiment.ProjectSearchFields;
+import org.apache.airavata.model.experiment.UserConfigurationDataModel;
 import org.apache.airavata.model.group.ResourcePermissionType;
 import org.apache.airavata.model.group.ResourceType;
 import org.apache.airavata.model.job.JobModel;
@@ -85,14 +110,28 @@ import org.apache.airavata.registry.api.client.RegistryServiceClientFactory;
 import org.apache.airavata.registry.api.exception.RegistryServiceException;
 import org.apache.airavata.service.security.interceptor.SecurityCheck;
 import org.apache.airavata.sharing.registry.client.SharingRegistryServiceClientFactory;
-import org.apache.airavata.sharing.registry.models.*;
+import org.apache.airavata.sharing.registry.models.Domain;
+import org.apache.airavata.sharing.registry.models.Entity;
+import org.apache.airavata.sharing.registry.models.EntitySearchField;
+import org.apache.airavata.sharing.registry.models.EntityType;
+import org.apache.airavata.sharing.registry.models.PermissionType;
+import org.apache.airavata.sharing.registry.models.SearchCondition;
+import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.registry.models.SharingRegistryException;
+import org.apache.airavata.sharing.registry.models.User;
 import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService;
 import org.apache.commons.pool.impl.GenericObjectPool;
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 public class AiravataServerHandler implements Airavata.Iface {
     private static final Logger logger = LoggerFactory.getLogger(AiravataServerHandler.class);
@@ -176,7 +215,7 @@ public class AiravataServerHandler implements Airavata.Iface {
                 client.createEntityType(entityType);
 
                 entityType = new EntityType();
-                entityType.setEntityTypeId(domain.domainId+":APPLICATION-DEPLOYMENT");
+                entityType.setEntityTypeId(domain.domainId+":"+ResourceType.APPLICATION_DEPLOYMENT.name());
                 entityType.setDomainId(domain.domainId);
                 entityType.setName("APPLICATION-DEPLOYMENT");
                 entityType.setDescription("Application Deployment entity type");
@@ -278,7 +317,7 @@ public class AiravataServerHandler implements Airavata.Iface {
             sharingClient.createEntityType(entityType);
 
             entityType = new EntityType();
-            entityType.setEntityTypeId(domain.domainId+":APPLICATION-DEPLOYMENT");
+            entityType.setEntityTypeId(domain.domainId+":"+ResourceType.APPLICATION_DEPLOYMENT.name());
             entityType.setDomainId(domain.domainId);
             entityType.setName("APPLICATION-DEPLOYMENT");
             entityType.setDescription("Application Deployment entity type");
@@ -2139,24 +2178,29 @@ public class AiravataServerHandler implements Airavata.Iface {
      */
     @Override
     @SecurityCheck
-    public List<ApplicationModule> getAccessibleAppModules(AuthzToken authzToken, String gatewayId) throws InvalidRequestException,
+    public List<ApplicationModule> getAccessibleAppModules(AuthzToken authzToken, String gatewayId, ResourcePermissionType permissionType) throws InvalidRequestException,
             AiravataClientException, AiravataSystemException, AuthorizationException, TException {
         RegistryService.Client regClient = registryClientPool.getResource();
         String userName = authzToken.getClaimsMap().get(Constants.USER_NAME);
         SharingRegistryService.Client sharingClient = sharingClientPool.getResource();
         try {
-            List<String> accessibleAppIds = new ArrayList<>();
+            List<String> accessibleAppDeploymentIds = new ArrayList<>();
             if (ServerSettings.isEnableSharing()) {
                 List<SearchCriteria> sharingFilters = new ArrayList<>();
-                SearchCriteria searchCriteria = new SearchCriteria();
-                searchCriteria.setSearchField(EntitySearchField.ENTITY_TYPE_ID);
-                searchCriteria.setSearchCondition(SearchCondition.EQUAL);
-                searchCriteria.setValue(gatewayId + ":APPLICATION");
-                sharingFilters.add(searchCriteria);
+                SearchCriteria entityTypeFilter = new SearchCriteria();
+                entityTypeFilter.setSearchField(EntitySearchField.ENTITY_TYPE_ID);
+                entityTypeFilter.setSearchCondition(SearchCondition.EQUAL);
+                entityTypeFilter.setValue(gatewayId + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
+                sharingFilters.add(entityTypeFilter);
+                SearchCriteria permissionTypeFilter = new SearchCriteria();
+                permissionTypeFilter.setSearchField(EntitySearchField.PERMISSION_TYPE_ID);
+                permissionTypeFilter.setSearchCondition(SearchCondition.EQUAL);
+                permissionTypeFilter.setValue(gatewayId + ":" + permissionType.name());
+                sharingFilters.add(permissionTypeFilter);
                 sharingClient.searchEntities(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
-                        userName + "@" + gatewayId, sharingFilters, 0, -1).forEach(a -> accessibleAppIds.add(a.entityId));
+                        userName + "@" + gatewayId, sharingFilters, 0, -1).forEach(a -> accessibleAppDeploymentIds.add(a.entityId));
             }
-            List<ApplicationModule> result = regClient.getAccessibleAppModules(gatewayId, accessibleAppIds);
+            List<ApplicationModule> result = regClient.getAccessibleAppModules(gatewayId, accessibleAppDeploymentIds);
             registryClientPool.returnResource(regClient);
             sharingClientPool.returnResource(sharingClient);
             return result;
@@ -2336,24 +2380,29 @@ public class AiravataServerHandler implements Airavata.Iface {
      */
     @Override
     @SecurityCheck
-    public List<ApplicationDeploymentDescription> getAccessibleApplicationDeployments(AuthzToken authzToken, String gatewayId)
+    public List<ApplicationDeploymentDescription> getAccessibleApplicationDeployments(AuthzToken authzToken, String gatewayId, ResourcePermissionType permissionType)
             throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException {
         RegistryService.Client regClient = registryClientPool.getResource();
         String userName = authzToken.getClaimsMap().get(Constants.USER_NAME);
         SharingRegistryService.Client sharingClient = sharingClientPool.getResource();
         try {
-            List<String> accessibleAppIds = new ArrayList<>();
+            List<String> accessibleAppDeploymentIds = new ArrayList<>();
             if (ServerSettings.isEnableSharing()) {
                 List<SearchCriteria> sharingFilters = new ArrayList<>();
-                SearchCriteria searchCriteria = new SearchCriteria();
-                searchCriteria.setSearchField(EntitySearchField.ENTITY_TYPE_ID);
-                searchCriteria.setSearchCondition(SearchCondition.EQUAL);
-                searchCriteria.setValue(gatewayId + ":APPLICATION");
-                sharingFilters.add(searchCriteria);
+                SearchCriteria entityTypeFilter = new SearchCriteria();
+                entityTypeFilter.setSearchField(EntitySearchField.ENTITY_TYPE_ID);
+                entityTypeFilter.setSearchCondition(SearchCondition.EQUAL);
+                entityTypeFilter.setValue(gatewayId + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
+                sharingFilters.add(entityTypeFilter);
+                SearchCriteria permissionTypeFilter = new SearchCriteria();
+                permissionTypeFilter.setSearchField(EntitySearchField.PERMISSION_TYPE_ID);
+                permissionTypeFilter.setSearchCondition(SearchCondition.EQUAL);
+                permissionTypeFilter.setValue(gatewayId + ":" + permissionType.name());
+                sharingFilters.add(permissionTypeFilter);
                 sharingClient.searchEntities(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
-                        userName + "@" + gatewayId, sharingFilters, 0, -1).forEach(a -> accessibleAppIds.add(a.entityId));
+                        userName + "@" + gatewayId, sharingFilters, 0, -1).forEach(a -> accessibleAppDeploymentIds.add(a.entityId));
             }
-            List<ApplicationDeploymentDescription> result = regClient.getAccessibleApplicationDeployments(gatewayId, accessibleAppIds);
+            List<ApplicationDeploymentDescription> result = regClient.getAccessibleApplicationDeployments(gatewayId, accessibleAppDeploymentIds);
             registryClientPool.returnResource(regClient);
             sharingClientPool.returnResource(sharingClient);
             return result;
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
index d3a0800..1b20368 100644
--- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
@@ -1230,6 +1230,8 @@ public class Airavata {
      * 
      * @param gatewayId
      *    ID of the gateway which need to list all accessible application deployment documentation.
+     * @param permissionType
+     *    ResourcePermissionType to check for this user
      * 
      * @return list
      *    Returns the list of all Application Module Objects that are accessible to the user.
@@ -1237,8 +1239,9 @@ public class Airavata {
      * 
      * @param authzToken
      * @param gatewayId
+     * @param permissionType
      */
-    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException;
+    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.Autho [...]
 
     /**
      * 
@@ -1350,6 +1353,8 @@ public class Airavata {
      * 
      * @param gatewayId
      *    ID of the gateway which need to list all accessible application deployment documentation.
+     * @param permissionType
+     *    ResourcePermissionType to check for this user
      * 
      * @return list<applicationDeployment.
      *    Returns the list of all application Deployment Objects that are accessible to the user.
@@ -1357,8 +1362,9 @@ public class Airavata {
      * 
      * @param authzToken
      * @param gatewayId
+     * @param permissionType
      */
-    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription> getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException;
+    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription> getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache [...]
 
     /**
      * Fetch a list of Deployed Compute Hosts.
@@ -3183,7 +3189,7 @@ public class Airavata {
 
     public void getAllAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler) throws org.apache.thrift.TException;
 
-    public void getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler) throws org.apache.thrift.TException;
+    public void getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler) throws org.apache.thrift.TException;
 
     public void deleteApplicationModule(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appModuleId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
 
@@ -3197,7 +3203,7 @@ public class Airavata {
 
     public void getAllApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler) throws org.apache.thrift.TException;
 
-    public void getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler) throws org.apache.thrift.TException;
+    public void getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler) throws org.apache.thrift.TException;
 
     public void getAppModuleDeployedResources(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appModuleId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.String>> resultHandler) throws org.apache.thrift.TException;
 
@@ -5488,17 +5494,18 @@ public class Airavata {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getAllAppModules failed: unknown result");
     }
 
-    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException
+    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.Autho [...]
     {
-      send_getAccessibleAppModules(authzToken, gatewayId);
+      send_getAccessibleAppModules(authzToken, gatewayId, permissionType);
       return recv_getAccessibleAppModules();
     }
 
-    public void send_getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId) throws org.apache.thrift.TException
+    public void send_getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType) throws org.apache.thrift.TException
     {
       getAccessibleAppModules_args args = new getAccessibleAppModules_args();
       args.setAuthzToken(authzToken);
       args.setGatewayId(gatewayId);
+      args.setPermissionType(permissionType);
       sendBase("getAccessibleAppModules", args);
     }
 
@@ -5742,17 +5749,18 @@ public class Airavata {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getAllApplicationDeployments failed: unknown result");
     }
 
-    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription> getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException
+    public java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription> getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache [...]
     {
-      send_getAccessibleApplicationDeployments(authzToken, gatewayId);
+      send_getAccessibleApplicationDeployments(authzToken, gatewayId, permissionType);
       return recv_getAccessibleApplicationDeployments();
     }
 
-    public void send_getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId) throws org.apache.thrift.TException
+    public void send_getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType) throws org.apache.thrift.TException
     {
       getAccessibleApplicationDeployments_args args = new getAccessibleApplicationDeployments_args();
       args.setAuthzToken(authzToken);
       args.setGatewayId(gatewayId);
+      args.setPermissionType(permissionType);
       sendBase("getAccessibleApplicationDeployments", args);
     }
 
@@ -12268,9 +12276,9 @@ public class Airavata {
       }
     }
 
-    public void getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler) throws org.apache.thrift.TException {
+    public void getAccessibleAppModules(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getAccessibleAppModules_call method_call = new getAccessibleAppModules_call(authzToken, gatewayId, resultHandler, this, ___protocolFactory, ___transport);
+      getAccessibleAppModules_call method_call = new getAccessibleAppModules_call(authzToken, gatewayId, permissionType, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
@@ -12278,10 +12286,12 @@ public class Airavata {
     public static class getAccessibleAppModules_call extends org.apache.thrift.async.TAsyncMethodCall<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> {
       private org.apache.airavata.model.security.AuthzToken authzToken;
       private java.lang.String gatewayId;
-      public getAccessibleAppModules_call(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      private org.apache.airavata.model.group.ResourcePermissionType permissionType;
+      public getAccessibleAppModules_call(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTr [...]
         super(client, protocolFactory, transport, resultHandler, false);
         this.authzToken = authzToken;
         this.gatewayId = gatewayId;
+        this.permissionType = permissionType;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
@@ -12289,6 +12299,7 @@ public class Airavata {
         getAccessibleAppModules_args args = new getAccessibleAppModules_args();
         args.setAuthzToken(authzToken);
         args.setGatewayId(gatewayId);
+        args.setPermissionType(permissionType);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -12519,9 +12530,9 @@ public class Airavata {
       }
     }
 
-    public void getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler) throws org.apache.thrift.TException {
+    public void getAccessibleApplicationDeployments(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getAccessibleApplicationDeployments_call method_call = new getAccessibleApplicationDeployments_call(authzToken, gatewayId, resultHandler, this, ___protocolFactory, ___transport);
+      getAccessibleApplicationDeployments_call method_call = new getAccessibleApplicationDeployments_call(authzToken, gatewayId, permissionType, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
@@ -12529,10 +12540,12 @@ public class Airavata {
     public static class getAccessibleApplicationDeployments_call extends org.apache.thrift.async.TAsyncMethodCall<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> {
       private org.apache.airavata.model.security.AuthzToken authzToken;
       private java.lang.String gatewayId;
-      public getAccessibleApplicationDeployments_call(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift. [...]
+      private org.apache.airavata.model.group.ResourcePermissionType permissionType;
+      public getAccessibleApplicationDeployments_call(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String gatewayId, org.apache.airavata.model.group.ResourcePermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thri [...]
         super(client, protocolFactory, transport, resultHandler, false);
         this.authzToken = authzToken;
         this.gatewayId = gatewayId;
+        this.permissionType = permissionType;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
@@ -12540,6 +12553,7 @@ public class Airavata {
         getAccessibleApplicationDeployments_args args = new getAccessibleApplicationDeployments_args();
         args.setAuthzToken(authzToken);
         args.setGatewayId(gatewayId);
+        args.setPermissionType(permissionType);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -18908,7 +18922,7 @@ public class Airavata {
       public getAccessibleAppModules_result getResult(I iface, getAccessibleAppModules_args args) throws org.apache.thrift.TException {
         getAccessibleAppModules_result result = new getAccessibleAppModules_result();
         try {
-          result.success = iface.getAccessibleAppModules(args.authzToken, args.gatewayId);
+          result.success = iface.getAccessibleAppModules(args.authzToken, args.gatewayId, args.permissionType);
         } catch (org.apache.airavata.model.error.InvalidRequestException ire) {
           result.ire = ire;
         } catch (org.apache.airavata.model.error.AiravataClientException ace) {
@@ -19121,7 +19135,7 @@ public class Airavata {
       public getAccessibleApplicationDeployments_result getResult(I iface, getAccessibleApplicationDeployments_args args) throws org.apache.thrift.TException {
         getAccessibleApplicationDeployments_result result = new getAccessibleApplicationDeployments_result();
         try {
-          result.success = iface.getAccessibleApplicationDeployments(args.authzToken, args.gatewayId);
+          result.success = iface.getAccessibleApplicationDeployments(args.authzToken, args.gatewayId, args.permissionType);
         } catch (org.apache.airavata.model.error.InvalidRequestException ire) {
           result.ire = ire;
         } catch (org.apache.airavata.model.error.AiravataClientException ace) {
@@ -27315,7 +27329,7 @@ public class Airavata {
       }
 
       public void start(I iface, getAccessibleAppModules_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>> resultHandler) throws org.apache.thrift.TException {
-        iface.getAccessibleAppModules(args.authzToken, args.gatewayId,resultHandler);
+        iface.getAccessibleAppModules(args.authzToken, args.gatewayId, args.permissionType,resultHandler);
       }
     }
 
@@ -27857,7 +27871,7 @@ public class Airavata {
       }
 
       public void start(I iface, getAccessibleApplicationDeployments_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription>> resultHandler) throws org.apache.thrift.TException {
-        iface.getAccessibleApplicationDeployments(args.authzToken, args.gatewayId,resultHandler);
+        iface.getAccessibleApplicationDeployments(args.authzToken, args.gatewayId, args.permissionType,resultHandler);
       }
     }
 
@@ -111783,17 +111797,28 @@ public class Airavata {
 
     private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionType", org.apache.thrift.protocol.TType.I32, (short)3);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAccessibleAppModules_argsStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAccessibleAppModules_argsTupleSchemeFactory();
 
     public org.apache.airavata.model.security.AuthzToken authzToken; // required
     public java.lang.String gatewayId; // required
+    /**
+     * 
+     * @see org.apache.airavata.model.group.ResourcePermissionType
+     */
+    public org.apache.airavata.model.group.ResourcePermissionType permissionType; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       AUTHZ_TOKEN((short)1, "authzToken"),
-      GATEWAY_ID((short)2, "gatewayId");
+      GATEWAY_ID((short)2, "gatewayId"),
+      /**
+       * 
+       * @see org.apache.airavata.model.group.ResourcePermissionType
+       */
+      PERMISSION_TYPE((short)3, "permissionType");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -111812,6 +111837,8 @@ public class Airavata {
             return AUTHZ_TOKEN;
           case 2: // GATEWAY_ID
             return GATEWAY_ID;
+          case 3: // PERMISSION_TYPE
+            return PERMISSION_TYPE;
           default:
             return null;
         }
@@ -111859,6 +111886,8 @@ public class Airavata {
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
       tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.PERMISSION_TYPE, new org.apache.thrift.meta_data.FieldMetaData("permissionType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.airavata.model.group.ResourcePermissionType.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getAccessibleAppModules_args.class, metaDataMap);
     }
@@ -111868,11 +111897,13 @@ public class Airavata {
 
     public getAccessibleAppModules_args(
       org.apache.airavata.model.security.AuthzToken authzToken,
-      java.lang.String gatewayId)
+      java.lang.String gatewayId,
+      org.apache.airavata.model.group.ResourcePermissionType permissionType)
     {
       this();
       this.authzToken = authzToken;
       this.gatewayId = gatewayId;
+      this.permissionType = permissionType;
     }
 
     /**
@@ -111885,6 +111916,9 @@ public class Airavata {
       if (other.isSetGatewayId()) {
         this.gatewayId = other.gatewayId;
       }
+      if (other.isSetPermissionType()) {
+        this.permissionType = other.permissionType;
+      }
     }
 
     public getAccessibleAppModules_args deepCopy() {
@@ -111895,6 +111929,7 @@ public class Airavata {
     public void clear() {
       this.authzToken = null;
       this.gatewayId = null;
+      this.permissionType = null;
     }
 
     public org.apache.airavata.model.security.AuthzToken getAuthzToken() {
@@ -111945,6 +111980,38 @@ public class Airavata {
       }
     }
 
+    /**
+     * 
+     * @see org.apache.airavata.model.group.ResourcePermissionType
+     */
+    public org.apache.airavata.model.group.ResourcePermissionType getPermissionType() {
+      return this.permissionType;
+    }
+
+    /**
+     * 
+     * @see org.apache.airavata.model.group.ResourcePermissionType
+     */
+    public getAccessibleAppModules_args setPermissionType(org.apache.airavata.model.group.ResourcePermissionType permissionType) {
+      this.permissionType = permissionType;
+      return this;
+    }
+
+    public void unsetPermissionType() {
+      this.permissionType = null;
+    }
+
+    /** Returns true if field permissionType is set (has been assigned a value) and false otherwise */
+    public boolean isSetPermissionType() {
+      return this.permissionType != null;
+    }
+
+    public void setPermissionTypeIsSet(boolean value) {
+      if (!value) {
+        this.permissionType = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, java.lang.Object value) {
       switch (field) {
       case AUTHZ_TOKEN:
@@ -111963,6 +112030,14 @@ public class Airavata {
         }
         break;
 
+      case PERMISSION_TYPE:
+        if (value == null) {
+          unsetPermissionType();
+        } else {
+          setPermissionType((org.apache.airavata.model.group.ResourcePermissionType)value);
+        }
+        break;
+
       }
     }
 
@@ -111974,6 +112049,9 @@ public class Airavata {
       case GATEWAY_ID:
         return getGatewayId();
 
+      case PERMISSION_TYPE:
+        return getPermissionType();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -111989,6 +112067,8 @@ public class Airavata {
         return isSetAuthzToken();
       case GATEWAY_ID:
         return isSetGatewayId();
+      case PERMISSION_TYPE:
+        return isSetPermissionType();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -112026,6 +112106,15 @@ public class Airavata {
           return false;
       }
 
+      boolean this_present_permissionType = true && this.isSetPermissionType();
+      boolean that_present_permissionType = true && that.isSetPermissionType();
+      if (this_present_permissionType || that_present_permissionType) {
+        if (!(this_present_permissionType && that_present_permissionType))
+          return false;
+        if (!this.permissionType.equals(that.permissionType))
+          return false;
+      }
+
       return true;
     }
 
@@ -112041,6 +112130,10 @@ public class Airavata {
       if (isSetGatewayId())
         hashCode = hashCode * 8191 + gatewayId.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetPermissionType()) ? 131071 : 524287);
+      if (isSetPermissionType())
+        hashCode = hashCode * 8191 + permissionType.getValue();
+
       return hashCode;
     }
 
@@ -112072,6 +112165,16 @@ public class Airavata {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetPermissionType()).compareTo(other.isSetPermissionType());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetPermissionType()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.permissionType, other.permissionType);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -112107,6 +112210,14 @@ public class Airavata {
         sb.append(this.gatewayId);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("permissionType:");
+      if (this.permissionType == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.permissionType);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -112119,6 +112230,9 @@ public class Airavata {
       if (gatewayId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'gatewayId' was not present! Struct: " + toString());
       }
+      if (permissionType == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'permissionType' was not present! Struct: " + toString());
+      }
       // check for sub-struct validity
       if (authzToken != null) {
         authzToken.validate();
@@ -112176,6 +112290,14 @@ public class Airavata {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 3: // PERMISSION_TYPE
+              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                struct.permissionType = org.apache.airavata.model.group.ResourcePermissionType.findByValue(iprot.readI32());
+                struct.setPermissionTypeIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -112201,6 +112323,11 @@ public class Airavata {
           oprot.writeString(struct.gatewayId);
           oprot.writeFieldEnd();
         }
+        if (struct.permissionType != null) {
+          oprot.writeFieldBegin(PERMISSION_TYPE_FIELD_DESC);
+          oprot.writeI32(struct.permissionType.getValue());
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -112220,6 +112347,7 @@ public class Airavata {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken.write(oprot);
         oprot.writeString(struct.gatewayId);
+        oprot.writeI32(struct.permissionType.getValue());
       }
 
       @Override
@@ -112230,6 +112358,8 @@ public class Airavata {
         struct.setAuthzTokenIsSet(true);
         struct.gatewayId = iprot.readString();
         struct.setGatewayIdIsSet(true);
+        struct.permissionType = org.apache.airavata.model.group.ResourcePermissionType.findByValue(iprot.readI32());
+        struct.setPermissionTypeIsSet(true);
       }
     }
 
@@ -120822,17 +120952,28 @@ public class Airavata {
 
     private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionType", org.apache.thrift.protocol.TType.I32, (short)3);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAccessibleApplicationDeployments_argsStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAccessibleApplicationDeployments_argsTupleSchemeFactory();
 
     public org.apache.airavata.model.security.AuthzToken authzToken; // required
     public java.lang.String gatewayId; // required
+    /**
+     * 
+     * @see org.apache.airavata.model.group.ResourcePermissionType
+     */
+    public org.apache.airavata.model.group.ResourcePermissionType permissionType; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       AUTHZ_TOKEN((short)1, "authzToken"),
-      GATEWAY_ID((short)2, "gatewayId");
+      GATEWAY_ID((short)2, "gatewayId"),
+      /**
+       * 
+       * @see org.apache.airavata.model.group.ResourcePermissionType
+       */
+      PERMISSION_TYPE((short)3, "permissionType");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -120851,6 +120992,8 @@ public class Airavata {
             return AUTHZ_TOKEN;
           case 2: // GATEWAY_ID
             return GATEWAY_ID;
+          case 3: // PERMISSION_TYPE
+            return PERMISSION_TYPE;
           default:
             return null;
         }
@@ -120898,6 +121041,8 @@ public class Airavata {
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
       tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.PERMISSION_TYPE, new org.apache.thrift.meta_data.FieldMetaData("permissionType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.airavata.model.group.ResourcePermissionType.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getAccessibleApplicationDeployments_args.class, metaDataMap);
     }
@@ -120907,11 +121052,13 @@ public class Airavata {
 
     public getAccessibleApplicationDeployments_args(
       org.apache.airavata.model.security.AuthzToken authzToken,
-      java.lang.String gatewayId)
+      java.lang.String gatewayId,
+      org.apache.airavata.model.group.ResourcePermissionType permissionType)
     {
       this();
       this.authzToken = authzToken;
       this.gatewayId = gatewayId;
+      this.permissionType = permissionType;
     }
 
     /**
@@ -120924,6 +121071,9 @@ public class Airavata {
       if (other.isSetGatewayId()) {
         this.gatewayId = other.gatewayId;
       }
+      if (other.isSetPermissionType()) {
+        this.permissionType = other.permissionType;
+      }
     }
 
     public getAccessibleApplicationDeployments_args deepCopy() {
@@ -120934,6 +121084,7 @@ public class Airavata {
     public void clear() {
       this.authzToken = null;
       this.gatewayId = null;
+      this.permissionType = null;
     }
 
     public org.apache.airavata.model.security.AuthzToken getAuthzToken() {
@@ -120984,6 +121135,38 @@ public class Airavata {
       }
     }
 
+    /**
+     * 
+     * @see org.apache.airavata.model.group.ResourcePermissionType
+     */
+    public org.apache.airavata.model.group.ResourcePermissionType getPermissionType() {
+      return this.permissionType;
+    }
+
+    /**
+     * 
+     * @see org.apache.airavata.model.group.ResourcePermissionType
+     */
+    public getAccessibleApplicationDeployments_args setPermissionType(org.apache.airavata.model.group.ResourcePermissionType permissionType) {
+      this.permissionType = permissionType;
+      return this;
+    }
+
+    public void unsetPermissionType() {
+      this.permissionType = null;
+    }
+
+    /** Returns true if field permissionType is set (has been assigned a value) and false otherwise */
+    public boolean isSetPermissionType() {
+      return this.permissionType != null;
+    }
+
+    public void setPermissionTypeIsSet(boolean value) {
+      if (!value) {
+        this.permissionType = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, java.lang.Object value) {
       switch (field) {
       case AUTHZ_TOKEN:
@@ -121002,6 +121185,14 @@ public class Airavata {
         }
         break;
 
+      case PERMISSION_TYPE:
+        if (value == null) {
+          unsetPermissionType();
+        } else {
+          setPermissionType((org.apache.airavata.model.group.ResourcePermissionType)value);
+        }
+        break;
+
       }
     }
 
@@ -121013,6 +121204,9 @@ public class Airavata {
       case GATEWAY_ID:
         return getGatewayId();
 
+      case PERMISSION_TYPE:
+        return getPermissionType();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -121028,6 +121222,8 @@ public class Airavata {
         return isSetAuthzToken();
       case GATEWAY_ID:
         return isSetGatewayId();
+      case PERMISSION_TYPE:
+        return isSetPermissionType();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -121065,6 +121261,15 @@ public class Airavata {
           return false;
       }
 
+      boolean this_present_permissionType = true && this.isSetPermissionType();
+      boolean that_present_permissionType = true && that.isSetPermissionType();
+      if (this_present_permissionType || that_present_permissionType) {
+        if (!(this_present_permissionType && that_present_permissionType))
+          return false;
+        if (!this.permissionType.equals(that.permissionType))
+          return false;
+      }
+
       return true;
     }
 
@@ -121080,6 +121285,10 @@ public class Airavata {
       if (isSetGatewayId())
         hashCode = hashCode * 8191 + gatewayId.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetPermissionType()) ? 131071 : 524287);
+      if (isSetPermissionType())
+        hashCode = hashCode * 8191 + permissionType.getValue();
+
       return hashCode;
     }
 
@@ -121111,6 +121320,16 @@ public class Airavata {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetPermissionType()).compareTo(other.isSetPermissionType());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetPermissionType()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.permissionType, other.permissionType);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -121146,6 +121365,14 @@ public class Airavata {
         sb.append(this.gatewayId);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("permissionType:");
+      if (this.permissionType == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.permissionType);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -121158,6 +121385,9 @@ public class Airavata {
       if (gatewayId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'gatewayId' was not present! Struct: " + toString());
       }
+      if (permissionType == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'permissionType' was not present! Struct: " + toString());
+      }
       // check for sub-struct validity
       if (authzToken != null) {
         authzToken.validate();
@@ -121215,6 +121445,14 @@ public class Airavata {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 3: // PERMISSION_TYPE
+              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                struct.permissionType = org.apache.airavata.model.group.ResourcePermissionType.findByValue(iprot.readI32());
+                struct.setPermissionTypeIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -121240,6 +121478,11 @@ public class Airavata {
           oprot.writeString(struct.gatewayId);
           oprot.writeFieldEnd();
         }
+        if (struct.permissionType != null) {
+          oprot.writeFieldBegin(PERMISSION_TYPE_FIELD_DESC);
+          oprot.writeI32(struct.permissionType.getValue());
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -121259,6 +121502,7 @@ public class Airavata {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken.write(oprot);
         oprot.writeString(struct.gatewayId);
+        oprot.writeI32(struct.permissionType.getValue());
       }
 
       @Override
@@ -121269,6 +121513,8 @@ public class Airavata {
         struct.setAuthzTokenIsSet(true);
         struct.gatewayId = iprot.readString();
         struct.setGatewayIdIsSet(true);
+        struct.permissionType = org.apache.airavata.model.group.ResourcePermissionType.findByValue(iprot.readI32());
+        struct.setPermissionTypeIsSet(true);
       }
     }
 
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
index 17fecdf..29bda80 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
@@ -31,7 +31,8 @@ import org.apache.thrift.TEnum;
 public enum ResourcePermissionType implements org.apache.thrift.TEnum {
   WRITE(0),
   READ(1),
-  OWNER(2);
+  OWNER(2),
+  EXEC(3);
 
   private final int value;
 
@@ -58,6 +59,8 @@ public enum ResourcePermissionType implements org.apache.thrift.TEnum {
         return READ;
       case 2:
         return OWNER;
+      case 3:
+        return EXEC;
       default:
         return null;
     }
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourceType.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourceType.java
index 7817ede..b2187fb 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourceType.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourceType.java
@@ -32,7 +32,8 @@ public enum ResourceType implements org.apache.thrift.TEnum {
   PROJECT(0),
   EXPERIMENT(1),
   DATA(2),
-  OTHER(3);
+  APPLICATION_DEPLOYMENT(3),
+  OTHER(4);
 
   private final int value;
 
@@ -60,6 +61,8 @@ public enum ResourceType implements org.apache.thrift.TEnum {
       case 2:
         return DATA;
       case 3:
+        return APPLICATION_DEPLOYMENT;
+      case 4:
         return OTHER;
       default:
         return null;
diff --git a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java b/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
index 89d006c..9b75cd5 100644
--- a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
+++ b/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
@@ -20,6 +20,8 @@
 package org.apache.airavata.sharing.registry.migrator.airavata;
 
 import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.model.group.ResourcePermissionType;
+import org.apache.airavata.model.group.ResourceType;
 import org.apache.airavata.sharing.registry.client.SharingRegistryServiceClientFactory;
 import org.apache.airavata.sharing.registry.models.*;
 import org.apache.airavata.sharing.registry.server.SharingRegistryServerHandler;
@@ -85,7 +87,7 @@ public class AiravataDataMigrator {
                     sharingRegistryServerHandler.createEntityType(entityType);
 
                 entityType = new EntityType();
-                entityType.setEntityTypeId(domain.domainId+":APPLICATION-DEPLOYMENT");
+                entityType.setEntityTypeId(domain.domainId+":"+ ResourceType.APPLICATION_DEPLOYMENT.name());
                 entityType.setDomainId(domain.domainId);
                 entityType.setName("APPLICATION-DEPLOYMENT");
                 entityType.setDescription("Application Deployment entity type");
@@ -204,7 +206,7 @@ public class AiravataDataMigrator {
                 Entity entity = new Entity();
                 entity.setEntityId(rs.getString("DEPLOYMENT_ID"));
                 entity.setDomainId(rs.getString("GATEWAY_ID"));
-                entity.setEntityTypeId(rs.getString("GATEWAY_ID") + ":APPLICATION-DEPLOYMENT");
+                entity.setEntityTypeId(rs.getString("GATEWAY_ID") + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
                 entity.setOwnerId(applicationDeploymentOwner);
                 entity.setName(rs.getString("DEPLOYMENT_ID"));
                 entity.setDescription(rs.getString("APPLICATION_DESC"));
@@ -218,7 +220,7 @@ public class AiravataDataMigrator {
                 if (!sharingRegistryServerHandler.isEntityExists(entity.domainId, entity.entityId))
                     sharingRegistryServerHandler.createEntity(entity);
                 String groupId = "everyone@" + entity.domainId;
-                sharingClient.shareEntityWithGroups(entity.domainId, entity.entityId, Arrays.asList(groupId), entity.domainId+":READ", true);
+                sharingClient.shareEntityWithGroups(entity.domainId, entity.entityId, Arrays.asList(groupId), entity.domainId+":"+ ResourcePermissionType.EXEC, true);
             } catch (Exception ex){
                 ex.printStackTrace();
             }
diff --git a/thrift-interface-descriptions/airavata-apis/airavata_api.thrift b/thrift-interface-descriptions/airavata-apis/airavata_api.thrift
index 24f6963..304f878 100644
--- a/thrift-interface-descriptions/airavata-apis/airavata_api.thrift
+++ b/thrift-interface-descriptions/airavata-apis/airavata_api.thrift
@@ -1404,13 +1404,15 @@ service Airavata {
    *
    * @param gatewayId
    *    ID of the gateway which need to list all accessible application deployment documentation.
+   * @param permissionType
+   *    ResourcePermissionType to check for this user
    *
    * @return list
    *    Returns the list of all Application Module Objects that are accessible to the user.
    *
   */
   list<application_deployment_model.ApplicationModule> getAccessibleAppModules (1: required security_model.AuthzToken authzToken,
-                2: required string gatewayId)
+                2: required string gatewayId, 3: required group_manager_model.ResourcePermissionType permissionType)
         throws (1: airavata_errors.InvalidRequestException ire,
                 2: airavata_errors.AiravataClientException ace,
                 3: airavata_errors.AiravataSystemException ase,
@@ -1546,13 +1548,15 @@ service Airavata {
    *
    * @param gatewayId
    *    ID of the gateway which need to list all accessible application deployment documentation.
+   * @param permissionType
+   *    ResourcePermissionType to check for this user
    *
    * @return list<applicationDeployment.
    *    Returns the list of all application Deployment Objects that are accessible to the user.
    *
   */
   list<application_deployment_model.ApplicationDeploymentDescription> getAccessibleApplicationDeployments(1: required security_model.AuthzToken authzToken,
-                  2: required string gatewayId)
+                  2: required string gatewayId, 3: required group_manager_model.ResourcePermissionType permissionType)
         throws (1: airavata_errors.InvalidRequestException ire,
                   2: airavata_errors.AiravataClientException ace,
                   3: airavata_errors.AiravataSystemException ase,
diff --git a/thrift-interface-descriptions/data-models/user-tenant-group-models/group_manager_model.thrift b/thrift-interface-descriptions/data-models/user-tenant-group-models/group_manager_model.thrift
index 2c0c98e..263aeb3 100644
--- a/thrift-interface-descriptions/data-models/user-tenant-group-models/group_manager_model.thrift
+++ b/thrift-interface-descriptions/data-models/user-tenant-group-models/group_manager_model.thrift
@@ -30,13 +30,15 @@ enum ResourceType {
     PROJECT,
     EXPERIMENT,
     DATA,
+    APPLICATION_DEPLOYMENT,
     OTHER
 }
 
 enum ResourcePermissionType {
     WRITE,
     READ,
-    OWNER
+    OWNER,
+    EXEC,
 }
 
 struct GroupModel{

-- 
To stop receiving notification emails like this one, please contact
machristie@apache.org.