You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by sa...@apache.org on 2018/02/07 21:42:36 UTC

[geode] branch develop updated: GEODE-3974: improve permission for Internal functions (#1395)

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

sai_boorlagadda pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new aa46923  GEODE-3974: improve permission for Internal functions (#1395)
aa46923 is described below

commit aa469239860778eb46e09dd7b390aee08f152480
Author: Sai Boorlagadda <sa...@gmail.com>
AuthorDate: Wed Feb 7 13:42:30 2018 -0800

    GEODE-3974: improve permission for Internal functions (#1395)
    
       New marker interface InternalFunction to define all
       internal functions. InternalFunctions need * permission.
---
 .../jdbc/internal/cli/AlterConnectionFunction.java |   9 --
 .../jdbc/internal/cli/AlterMappingFunction.java    |   9 --
 .../internal/cli/CreateConnectionFunction.java     |  10 ---
 .../jdbc/internal/cli/CreateMappingFunction.java   |  10 ---
 .../internal/cli/DescribeConnectionFunction.java   |  10 ---
 .../jdbc/internal/cli/DescribeMappingFunction.java |  10 ---
 .../internal/cli/DestroyConnectionFunction.java    |  10 ---
 .../jdbc/internal/cli/DestroyMappingFunction.java  |  10 ---
 .../jdbc/internal/cli/JdbcCliFunction.java         |  15 +---
 .../jdbc/internal/cli/ListConnectionFunction.java  |   9 --
 .../jdbc/internal/cli/ListMappingFunction.java     |   9 --
 .../cli/JDBCConnectorFunctionsSecurityTest.java    |  22 ++---
 .../internal/deadlock/GemFireDeadlockDetector.java |   5 +-
 .../internal/cache/PRContainsValueFunction.java    |   5 +-
 .../internal/cache/execute/InternalFunction.java   |  35 ++++----
 .../util/FindRestEnabledServersFunction.java       |   5 +-
 .../internal/cache/snapshot/ClientExporter.java    |   4 +-
 .../cache/snapshot/RegionSnapshotServiceImpl.java  |   4 +-
 .../internal/cache/snapshot/WindowedExporter.java  |   5 +-
 .../management/internal/JmxManagerLocator.java     |   5 +-
 .../management/internal/ManagementFunction.java    |   5 +-
 .../internal/beans/QueryDataFunction.java          |   3 +-
 .../cli/functions/AlterRuntimeConfigFunction.java  |  14 +--
 .../cli/functions/ChangeLogLevelFunction.java      |  14 +--
 .../cli/functions/CloseDurableClientFunction.java  |  15 +---
 .../cli/functions/CloseDurableCqFunction.java      |  15 +---
 .../cli/functions/ContinuousQueryFunction.java     |  13 +--
 .../functions/CreateAsyncEventQueueFunction.java   |  14 +--
 .../functions/CreateDefinedIndexesFunction.java    |  14 +--
 .../cli/functions/CreateDiskStoreFunction.java     |  15 +---
 .../cli/functions/CreateIndexFunction.java         |  15 +---
 .../cli/functions/DataCommandFunction.java         |  13 +--
 .../internal/cli/functions/DeployFunction.java     |  14 +--
 .../cli/functions/DescribeDiskStoreFunction.java   |  14 +--
 .../functions/DestroyAsyncEventQueueFunction.java  |  15 +---
 .../cli/functions/DestroyDiskStoreFunction.java    |  16 +---
 .../cli/functions/DestroyIndexFunction.java        |  14 +--
 .../cli/functions/ExportConfigFunction.java        |  14 +--
 .../internal/cli/functions/ExportDataFunction.java |  14 +--
 .../internal/cli/functions/ExportLogsFunction.java |  14 +--
 .../functions/FetchRegionAttributesFunction.java   |  14 +--
 .../FetchSharedConfigurationStatusFunction.java    |  16 +---
 .../cli/functions/GarbageCollectionFunction.java   |  15 +---
 .../functions/GatewayReceiverCreateFunction.java   |  14 +--
 .../cli/functions/GatewaySenderCreateFunction.java |  15 +---
 .../functions/GatewaySenderDestroyFunction.java    |  15 +---
 .../GetMemberConfigInformationFunction.java        |  14 +--
 .../functions/GetMemberInformationFunction.java    |  14 +--
 .../functions/GetRegionDescriptionFunction.java    |  15 +---
 .../internal/cli/functions/GetRegionsFunction.java |  14 +--
 .../cli/functions/GetStackTracesFunction.java      |  15 +---
 .../GetSubscriptionQueueSizeFunction.java          |  15 +---
 .../internal/cli/functions/ImportDataFunction.java |  14 +--
 .../functions/ListAsyncEventQueuesFunction.java    |  14 +--
 .../cli/functions/ListDeployedFunction.java        |  14 +--
 .../cli/functions/ListDiskStoresFunction.java      |  14 +--
 .../cli/functions/ListDurableCqNamesFunction.java  |  14 +--
 .../cli/functions/ListFunctionFunction.java        |  13 +--
 .../internal/cli/functions/ListIndexFunction.java  |  14 +--
 .../internal/cli/functions/NetstatFunction.java    |  14 +--
 .../internal/cli/functions/RebalanceFunction.java  |  14 +--
 .../cli/functions/RegionAlterFunction.java         |  14 +--
 .../cli/functions/RegionCreateFunction.java        |  14 +--
 .../cli/functions/RegionDestroyFunction.java       |  15 +---
 .../functions/ShowMissingDiskStoresFunction.java   |  14 +--
 .../internal/cli/functions/ShutDownFunction.java   |  14 +--
 .../cli/functions/SizeExportLogsFunction.java      |  14 +--
 .../internal/cli/functions/UndeployFunction.java   |  14 +--
 .../internal/cli/functions/UnregisterFunction.java |  15 +---
 .../cli/functions/UserFunctionExecution.java       |   4 +-
 .../functions/DownloadJarFunction.java             |  14 +--
 .../functions/GetClusterConfigurationFunction.java |  17 +---
 .../functions/GetRegionNamesFunction.java          |  14 +--
 .../functions/RecreateCacheFunction.java           |  15 +---
 .../cache/execute/CoreFunctionSecurityTest.java    | 100 ++++++++++-----------
 .../cli/functions/LuceneCreateIndexFunction.java   |  17 +---
 .../cli/functions/LuceneDescribeIndexFunction.java |  16 +---
 .../cli/functions/LuceneDestroyIndexFunction.java  |  18 +---
 .../cli/functions/LuceneListIndexFunction.java     |  15 +---
 .../cli/functions/LuceneSearchIndexFunction.java   |  20 +----
 .../internal/directory/DumpDirectoryFiles.java     |  18 +---
 .../internal/distributed/LuceneQueryFunction.java  |  14 +--
 .../distributed/WaitUntilFlushedFunction.java      |  15 +---
 .../internal/results/LuceneGetPageFunction.java    |  15 +---
 .../lucene/LuceneClientSecurityDUnitTest.java      |   5 +-
 .../lucene/test/LuceneFunctionSecurityTest.java    |  56 +++---------
 86 files changed, 234 insertions(+), 1020 deletions(-)

diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionFunction.java
index 68a3cb7..7ac8240 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterConnectionFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 
 import org.apache.geode.annotations.Experimental;
@@ -25,8 +23,6 @@ import org.apache.geode.connectors.jdbc.internal.ConnectionConfiguration;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class AlterConnectionFunction
@@ -90,9 +86,4 @@ public class AlterConnectionFunction
     String message = "Altered JDBC connection " + connectionName + " on " + member;
     return new CliFunctionResult(member, xmlEntity, message);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_MANAGE);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingFunction.java
index 9d44c46..f7f0045 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/AlterMappingFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 
 import org.apache.geode.annotations.Experimental;
@@ -25,8 +23,6 @@ import org.apache.geode.connectors.jdbc.internal.RegionMapping;
 import org.apache.geode.connectors.jdbc.internal.RegionMappingNotFoundException;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class AlterMappingFunction extends JdbcCliFunction<RegionMapping, CliFunctionResult> {
@@ -88,9 +84,4 @@ public class AlterMappingFunction extends JdbcCliFunction<RegionMapping, CliFunc
     String message = "Altered JDBC connection " + connectionName + " on " + member;
     return new CliFunctionResult(member, xmlEntity, message);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_MANAGE);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
index 65c5301..55b4358 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateConnectionFunction.java
@@ -14,9 +14,6 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.ConnectionConfigExistsException;
@@ -24,8 +21,6 @@ import org.apache.geode.connectors.jdbc.internal.ConnectionConfiguration;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class CreateConnectionFunction
@@ -58,9 +53,4 @@ public class CreateConnectionFunction
     String message = "Created JDBC connection " + connectionName + " on " + member;
     return new CliFunctionResult(member, xmlEntity, message);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_MANAGE);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java
index 2b5f046..a7fb1a5 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingFunction.java
@@ -14,9 +14,6 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
@@ -24,8 +21,6 @@ import org.apache.geode.connectors.jdbc.internal.RegionMapping;
 import org.apache.geode.connectors.jdbc.internal.RegionMappingExistsException;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class CreateMappingFunction extends JdbcCliFunction<RegionMapping, CliFunctionResult> {
@@ -62,9 +57,4 @@ public class CreateMappingFunction extends JdbcCliFunction<RegionMapping, CliFun
     String message = "Created JDBC mapping for region " + regionName + " on " + member;
     return new CliFunctionResult(member, xmlEntity, message);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_MANAGE);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionFunction.java
index 9f3feca..73c1cb8 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeConnectionFunction.java
@@ -14,15 +14,10 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.ConnectionConfiguration;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class DescribeConnectionFunction extends JdbcCliFunction<String, ConnectionConfiguration> {
@@ -36,9 +31,4 @@ public class DescribeConnectionFunction extends JdbcCliFunction<String, Connecti
       FunctionContext<String> context) {
     return service.getConnectionConfig(context.getArguments());
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
index d8b54a0..49c56a3 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
@@ -14,15 +14,10 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.connectors.jdbc.internal.RegionMapping;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class DescribeMappingFunction extends JdbcCliFunction<String, RegionMapping> {
@@ -35,9 +30,4 @@ public class DescribeMappingFunction extends JdbcCliFunction<String, RegionMappi
   RegionMapping getFunctionResult(JdbcConnectorService service, FunctionContext<String> context) {
     return service.getMappingForRegion(context.getArguments());
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionFunction.java
index de81353..e69710d 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyConnectionFunction.java
@@ -14,17 +14,12 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.ConnectionConfiguration;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class DestroyConnectionFunction extends JdbcCliFunction<String, CliFunctionResult> {
@@ -81,9 +76,4 @@ public class DestroyConnectionFunction extends JdbcCliFunction<String, CliFuncti
     String message = "Connection named \"" + connectionName + "\" not found";
     return new CliFunctionResult(member, false, message);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_MANAGE);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingFunction.java
index 9f739ed..643aea6 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyMappingFunction.java
@@ -14,17 +14,12 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.connectors.jdbc.internal.RegionMapping;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class DestroyMappingFunction extends JdbcCliFunction<String, CliFunctionResult> {
@@ -81,9 +76,4 @@ public class DestroyMappingFunction extends JdbcCliFunction<String, CliFunctionR
     String message = "Region mapping for region \"" + regionName + "\" not found";
     return new CliFunctionResult(member, false, message);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_MANAGE);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/JdbcCliFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/JdbcCliFunction.java
index fc39da0..8b7bd46 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/JdbcCliFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/JdbcCliFunction.java
@@ -14,20 +14,14 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.annotations.Experimental;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
-public abstract class JdbcCliFunction<T1, T2> implements Function<T1>, InternalEntity {
+public abstract class JdbcCliFunction<T1, T2> implements InternalFunction<T1> {
 
   private final FunctionContextArgumentProvider argumentProvider;
   private final ExceptionHandler exceptionHandler;
@@ -59,11 +53,6 @@ public abstract class JdbcCliFunction<T1, T2> implements Function<T1>, InternalE
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_READ);
-  }
-
   String getMember(FunctionContext<T1> context) {
     return argumentProvider.getMember(context);
   }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListConnectionFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListConnectionFunction.java
index 23926bc..58866a6 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListConnectionFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListConnectionFunction.java
@@ -14,16 +14,12 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Set;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.ConnectionConfiguration;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class ListConnectionFunction extends JdbcCliFunction<Void, ConnectionConfiguration[]> {
@@ -46,9 +42,4 @@ public class ListConnectionFunction extends JdbcCliFunction<Void, ConnectionConf
   private Set<ConnectionConfiguration> getConnectionConfigs(JdbcConnectorService service) {
     return service.getConnectionConfigs();
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListMappingFunction.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListMappingFunction.java
index 15497a0..7b472e1 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListMappingFunction.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/ListMappingFunction.java
@@ -14,16 +14,12 @@
  */
 package org.apache.geode.connectors.jdbc.internal.cli;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Set;
 
 import org.apache.geode.annotations.Experimental;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
 import org.apache.geode.connectors.jdbc.internal.RegionMapping;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 @Experimental
 public class ListMappingFunction extends JdbcCliFunction<Void, RegionMapping[]> {
@@ -45,9 +41,4 @@ public class ListMappingFunction extends JdbcCliFunction<Void, RegionMapping[]>
   private Set<RegionMapping> getRegionMappings(JdbcConnectorService service) {
     return service.getRegionMappings();
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/JDBCConnectorFunctionsSecurityTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/JDBCConnectorFunctionsSecurityTest.java
index a0abef0..abc0a3d 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/JDBCConnectorFunctionsSecurityTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/cli/JDBCConnectorFunctionsSecurityTest.java
@@ -63,17 +63,17 @@ public class JDBCConnectorFunctionsSecurityTest {
 
   @BeforeClass
   public static void setupClass() {
-    functionStringMap.put(new AlterConnectionFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new AlterMappingFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new CreateConnectionFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new CreateMappingFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new DescribeConnectionFunction(), "CLUSTER:READ");
-    functionStringMap.put(new DescribeMappingFunction(), "CLUSTER:READ");
-    functionStringMap.put(new DestroyConnectionFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new DestroyMappingFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new ListConnectionFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ListMappingFunction(), "CLUSTER:READ");
-    functionStringMap.put(new InheritsDefaultPermissionsJDBCFunction(), "CLUSTER:READ");
+    functionStringMap.put(new AlterConnectionFunction(), "*");
+    functionStringMap.put(new AlterMappingFunction(), "*");
+    functionStringMap.put(new CreateConnectionFunction(), "*");
+    functionStringMap.put(new CreateMappingFunction(), "*");
+    functionStringMap.put(new DescribeConnectionFunction(), "*");
+    functionStringMap.put(new DescribeMappingFunction(), "*");
+    functionStringMap.put(new DestroyConnectionFunction(), "*");
+    functionStringMap.put(new DestroyMappingFunction(), "*");
+    functionStringMap.put(new ListConnectionFunction(), "*");
+    functionStringMap.put(new ListMappingFunction(), "*");
+    functionStringMap.put(new InheritsDefaultPermissionsJDBCFunction(), "*");
     functionStringMap.keySet().forEach(FunctionService::registerFunction);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/deadlock/GemFireDeadlockDetector.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/deadlock/GemFireDeadlockDetector.java
index 2e039d8..1ade269 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/deadlock/GemFireDeadlockDetector.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/deadlock/GemFireDeadlockDetector.java
@@ -20,7 +20,6 @@ import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.geode.cache.execute.Execution;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionException;
 import org.apache.geode.cache.execute.FunctionService;
@@ -28,8 +27,8 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.execute.AbstractExecution;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
 /**
  * This class uses gemfire function execution to get the dependencies between threads present in
@@ -103,7 +102,7 @@ public class GemFireDeadlockDetector {
     return detector.getDependencyGraph();
   }
 
-  private static class CollectDependencyFunction implements Function, InternalEntity {
+  private static class CollectDependencyFunction implements InternalFunction {
 
     private static final long serialVersionUID = 6204378622627095817L;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PRContainsValueFunction.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PRContainsValueFunction.java
index ae2dd67..3747d53 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PRContainsValueFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PRContainsValueFunction.java
@@ -17,15 +17,14 @@ package org.apache.geode.internal.cache;
 import java.util.Iterator;
 
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.FunctionAdapter;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.RegionFunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
 /**
  *
  */
-public class PRContainsValueFunction extends FunctionAdapter implements InternalEntity {
+public class PRContainsValueFunction implements InternalFunction {
 
   @Override
   public void execute(FunctionContext context) {
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/InternalFunction.java
similarity index 52%
copy from geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
copy to geode-core/src/main/java/org/apache/geode/internal/cache/execute/InternalFunction.java
index d8b54a0..ffacf4f 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/DescribeMappingFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/InternalFunction.java
@@ -12,32 +12,29 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.connectors.jdbc.internal.cli;
+package org.apache.geode.internal.cache.execute;
 
 import java.util.Collection;
 import java.util.Collections;
 
-import org.apache.geode.annotations.Experimental;
-import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.connectors.jdbc.internal.JdbcConnectorService;
-import org.apache.geode.connectors.jdbc.internal.RegionMapping;
+import org.apache.geode.cache.execute.Function;
+import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.management.internal.security.ResourcePermissions;
 import org.apache.geode.security.ResourcePermission;
 
-@Experimental
-public class DescribeMappingFunction extends JdbcCliFunction<String, RegionMapping> {
-
-  DescribeMappingFunction() {
-    super(new FunctionContextArgumentProvider(), new ExceptionHandler());
-  }
-
-  @Override
-  RegionMapping getFunctionResult(JdbcConnectorService service, FunctionContext<String> context) {
-    return service.getMappingForRegion(context.getArguments());
-  }
+/**
+ * Defines a marker interface to be used by all internal functions and expected to require
+ * ResourcePermissions.ALL to execute the function. Internal Functions are functions that are
+ * executed by members with in the distributed system, if a function is required by a client API
+ * then it shouldn't be an InternalFunction.
+ */
+public interface InternalFunction<T> extends Function<T>, InternalEntity {
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.CLUSTER_READ);
+  /**
+   * InternalFunction do require ResourcePermissions.ALL so that it only allows super users to
+   * invoke from Clients. So don't override this in implementations.
+   */
+  default Collection<ResourcePermission> getRequiredPermissions(String regionName) {
+    return Collections.singletonList(ResourcePermissions.ALL);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/util/FindRestEnabledServersFunction.java b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/util/FindRestEnabledServersFunction.java
index 1977920..273aad2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/util/FindRestEnabledServersFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/util/FindRestEnabledServersFunction.java
@@ -15,12 +15,11 @@
 package org.apache.geode.internal.cache.execute.util;
 
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.RestAgent;
 
 /**
@@ -29,7 +28,7 @@ import org.apache.geode.management.internal.RestAgent;
  *
  * @since GemFire 8.1
  */
-public class FindRestEnabledServersFunction implements Function, InternalEntity {
+public class FindRestEnabledServersFunction implements InternalFunction {
   private static final long serialVersionUID = 7851518767859544678L;
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/ClientExporter.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/ClientExporter.java
index 9a947c1..1e4782f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/ClientExporter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/ClientExporter.java
@@ -30,7 +30,7 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.snapshot.RegionSnapshotServiceImpl.ExportSink;
 import org.apache.geode.internal.cache.snapshot.RegionSnapshotServiceImpl.Exporter;
 import org.apache.geode.internal.cache.snapshot.RegionSnapshotServiceImpl.ResultSenderSink;
@@ -118,7 +118,7 @@ public class ClientExporter<K, V> implements Exporter<K, V> {
    * @param <K> the key type
    * @param <V> the value type
    */
-  static class ProxyExportFunction<K, V> implements Function, InternalEntity {
+  static class ProxyExportFunction<K, V> implements InternalFunction {
     private static final long serialVersionUID = 1L;
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java
index f2b0a1c..057d081 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java
@@ -53,11 +53,11 @@ import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.CachedDeserializableFactory;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.LocalDataSet;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.Token;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.snapshot.GFSnapshot.GFSnapshotImporter;
 import org.apache.geode.internal.cache.snapshot.GFSnapshot.SnapshotWriter;
 import org.apache.geode.internal.cache.snapshot.SnapshotPacket.SnapshotRecord;
@@ -504,7 +504,7 @@ public class RegionSnapshotServiceImpl<K, V> implements RegionSnapshotService<K,
     }
   }
 
-  private static class ParallelExportFunction<K, V> implements Function, InternalEntity {
+  private static class ParallelExportFunction<K, V> implements InternalFunction {
     @Override
     public boolean hasResult() {
       return true;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/WindowedExporter.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/WindowedExporter.java
index 50c0b78..eddff7c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/WindowedExporter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/WindowedExporter.java
@@ -32,7 +32,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.geode.cache.EntryDestroyedException;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionException;
 import org.apache.geode.cache.execute.FunctionService;
@@ -44,9 +43,9 @@ import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.execute.InternalExecution;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.execute.LocalResultCollector;
 import org.apache.geode.internal.cache.snapshot.FlowController.Window;
 import org.apache.geode.internal.cache.snapshot.RegionSnapshotServiceImpl.ExportSink;
@@ -157,7 +156,7 @@ public class WindowedExporter<K, V> implements Exporter<K, V> {
    *
    * @see FlowController
    */
-  private static class WindowedExportFunction<K, V> implements Function, InternalEntity {
+  private static class WindowedExportFunction<K, V> implements InternalFunction {
     private static final long serialVersionUID = 1L;
 
     // We must keep a ref here since the ProcessorKeeper only has a weak ref. If
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java
index 1a5b531..cc7036b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java
@@ -24,7 +24,6 @@ import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.GemFireCache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.distributed.DistributedSystem;
@@ -32,8 +31,8 @@ import org.apache.geode.distributed.internal.ClusterConfigurationService;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.AlreadyRunningException;
 import org.apache.geode.management.ManagementService;
@@ -196,7 +195,7 @@ public class JmxManagerLocator implements TcpHandler {
     }
   }
 
-  public static class StartJmxManagerFunction implements Function, InternalEntity {
+  public static class StartJmxManagerFunction implements InternalFunction {
     private static final long serialVersionUID = -2860286061903069789L;
 
     public static final String ID = StartJmxManagerFunction.class.getName();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java
index 98161b7..64627d0 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java
@@ -25,11 +25,10 @@ import javax.management.ReflectionException;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.execute.FunctionAdapter;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 
 /**
@@ -42,7 +41,7 @@ import org.apache.geode.internal.logging.LogService;
  * 1) All setter methods 2) All operations 3) addNotificationListener 4) removeNotificationListener
  * 5) getNotificationInfo
  */
-public class ManagementFunction extends FunctionAdapter implements InternalEntity {
+public class ManagementFunction implements InternalFunction {
 
   private static final Logger logger = LogService.getLogger();
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
index 92b2a15..5fdc336 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
@@ -53,6 +53,7 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.LocalDataSet;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionHelper;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.ManagementService;
@@ -486,7 +487,7 @@ public class QueryDataFunction implements Function, InternalEntity {
   /**
    * Function to gather data locally. This function is required to execute query with region context
    */
-  private class LocalQueryFunction implements Function, InternalEntity {
+  private class LocalQueryFunction implements InternalFunction {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction.java
index 1a3aa24..74ea983 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -23,19 +21,16 @@ import java.util.Set;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.ConfigSource;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class AlterRuntimeConfigFunction implements Function, InternalEntity {
+public class AlterRuntimeConfigFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -90,11 +85,6 @@ public class AlterRuntimeConfigFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_WRITE);
-  }
-
-  @Override
   public String getId() {
     return AlterRuntimeConfigFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ChangeLogLevelFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ChangeLogLevelFunction.java
index 16b3ea1..526f4fe 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ChangeLogLevelFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ChangeLogLevelFunction.java
@@ -16,8 +16,6 @@ package org.apache.geode.management.internal.cli.functions;
 
 import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -25,16 +23,13 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogLevel;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.logging.log4j.LogWriterLogger;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 
 /**
@@ -45,7 +40,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  */
 
-public class ChangeLogLevelFunction implements Function, InternalEntity {
+public class ChangeLogLevelFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = ChangeLogLevelFunction.class.getName();
@@ -77,11 +72,6 @@ public class ChangeLogLevelFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_WRITE);
-  }
-
-  @Override
   public String getId() {
     return ChangeLogLevelFunction.ID;
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java
index f4ece32..358c0fd 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java
@@ -14,26 +14,20 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.domain.MemberResult;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /***
  * Function to close a durable client
  *
  */
-public class CloseDurableClientFunction implements Function, InternalEntity {
+public class CloseDurableClientFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -74,11 +68,6 @@ public class CloseDurableClientFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_QUERY);
-  }
-
-  @Override
   public String getId() {
     return CloseDurableClientFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java
index d196d9e..b736ebd 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java
@@ -14,26 +14,20 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.domain.MemberResult;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /***
  * Function to close a durable cq
  *
  */
-public class CloseDurableCqFunction implements Function, InternalEntity {
+public class CloseDurableCqFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -76,11 +70,6 @@ public class CloseDurableCqFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_QUERY);
-  }
-
-  @Override
   public String getId() {
     return CloseDurableCqFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction.java
index d9d389b..2a6454d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction.java
@@ -16,26 +16,22 @@ package org.apache.geode.management.internal.cli.functions;
 
 import java.io.Serializable;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.tier.sockets.AcceptorImpl;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * @since GemFire 8.0
  */
-public class ContinuousQueryFunction implements Function, InternalEntity {
+public class ContinuousQueryFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
   public static final String ID = ContinuousQueryFunction.class.getName();
@@ -107,11 +103,6 @@ public class ContinuousQueryFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return ContinuousQueryFunction.ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java
index a56efc2..696f7a9 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -27,7 +25,6 @@ import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.Declarable;
 import org.apache.geode.cache.asyncqueue.AsyncEventListener;
 import org.apache.geode.cache.asyncqueue.AsyncEventQueueFactory;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.wan.GatewayEventFilter;
 import org.apache.geode.cache.wan.GatewayEventSubstitutionFilter;
@@ -35,13 +32,11 @@ import org.apache.geode.cache.wan.GatewaySender.OrderPolicy;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * Function used by the 'create async-event-queue' gfsh command to create an asynchronous event
@@ -49,7 +44,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  * @since GemFire 8.0
  */
-public class CreateAsyncEventQueueFunction implements Function, InternalEntity {
+public class CreateAsyncEventQueueFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = 1L;
@@ -132,11 +127,6 @@ public class CreateAsyncEventQueueFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_DEPLOY);
-  }
-
   private Object newInstance(String className)
       throws ClassNotFoundException, IllegalAccessException, InstantiationException {
     if (Strings.isNullOrEmpty(className)) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunction.java
index 3d10421..12d5c33 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunction.java
@@ -15,30 +15,25 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.query.Index;
 import org.apache.geode.cache.query.IndexType;
 import org.apache.geode.cache.query.MultiIndexCreationException;
 import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.domain.IndexInfo;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class CreateDefinedIndexesFunction implements Function, InternalEntity {
+public class CreateDefinedIndexesFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
   @Override
@@ -126,9 +121,4 @@ public class CreateDefinedIndexesFunction implements Function, InternalEntity {
           .lastResult(new CliFunctionResult(memberId, exception, exceptionMessage));
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_QUERY);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
index d013a8e..5a52d04 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction.java
@@ -20,27 +20,21 @@ package org.apache.geode.management.internal.cli.functions;
  * @since GemFire 8.0
  */
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.DiskStoreFactory;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.DiskStoreAttributes;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class CreateDiskStoreFunction implements Function, InternalEntity {
+public class CreateDiskStoreFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = 1L;
@@ -85,11 +79,6 @@ public class CreateDiskStoreFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_DISK);
-  }
-
-  @Override
   public String getId() {
     return CreateDiskStoreFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
index 1e103f2..559fa28 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CreateIndexFunction.java
@@ -14,30 +14,24 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.query.IndexExistsException;
 import org.apache.geode.cache.query.IndexInvalidException;
 import org.apache.geode.cache.query.IndexNameConflictException;
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.query.RegionNotFoundException;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.domain.IndexInfo;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /***
  * Function to create index in a member, based on different arguments passed to it
  *
  */
-public class CreateIndexFunction implements Function, InternalEntity {
+public class CreateIndexFunction implements InternalFunction {
 
 
   private static final long serialVersionUID = 1L;
@@ -109,11 +103,6 @@ public class CreateIndexFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_QUERY);
-  }
-
   private String getValidRegionName(Cache cache, String regionPath) {
     while (regionPath != null && cache.getRegion(regionPath) == null) {
       int dotPosition;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
index 63c60de..989f79b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
@@ -15,7 +15,6 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -29,7 +28,6 @@ import org.json.JSONArray;
 
 import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.partition.PartitionRegionHelper;
 import org.apache.geode.cache.query.FunctionDomainException;
@@ -48,10 +46,10 @@ import org.apache.geode.cache.query.internal.StructImpl;
 import org.apache.geode.cache.query.internal.Undefined;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PartitionedRegion;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.management.internal.cli.domain.DataCommandRequest;
@@ -61,14 +59,12 @@ import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.json.GfJsonException;
 import org.apache.geode.management.internal.cli.json.GfJsonObject;
 import org.apache.geode.management.internal.cli.util.JsonUtil;
-import org.apache.geode.management.internal.security.ResourcePermissions;
 import org.apache.geode.pdx.PdxInstance;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * @since GemFire 7.0
  */
-public class DataCommandFunction implements Function, InternalEntity {
+public class DataCommandFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = 1L;
@@ -136,11 +132,6 @@ public class DataCommandFunction implements Function, InternalEntity {
     }
   }
 
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.DATA_ALL);
-  }
-
-
   public DataCommandResult remove(DataCommandRequest request, InternalCache cache) {
     String key = request.getKey();
     String keyClass = request.getKeyClass();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java
index 6652955..e169c87 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java
@@ -24,8 +24,6 @@ import java.nio.file.Paths;
 import java.nio.file.attribute.PosixFilePermission;
 import java.nio.file.attribute.PosixFilePermissions;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -40,18 +38,15 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.DeployedJar;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class DeployFunction implements Function, InternalEntity {
+public class DeployFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = DeployFunction.class.getName();
@@ -123,11 +118,6 @@ public class DeployFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_DEPLOY);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DescribeDiskStoreFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DescribeDiskStoreFunction.java
index 976a975..c4e680e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DescribeDiskStoreFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DescribeDiskStoreFunction.java
@@ -16,8 +16,6 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
@@ -31,20 +29,17 @@ import org.apache.geode.cache.DiskStore;
 import org.apache.geode.cache.EvictionAction;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.cache.wan.GatewaySender;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.lang.ObjectUtils;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.management.internal.cli.domain.DiskStoreDetails;
 import org.apache.geode.management.internal.cli.exceptions.EntityNotFoundException;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * The DescribeDiskStoreFunction class is an implementation of a GemFire Function used to collect
@@ -59,7 +54,7 @@ import org.apache.geode.security.ResourcePermission;
  * @see org.apache.geode.management.internal.cli.domain.DiskStoreDetails
  * @since GemFire 7.0
  */
-public class DescribeDiskStoreFunction implements Function, InternalEntity {
+public class DescribeDiskStoreFunction implements InternalFunction {
 
   private static final Logger logger = LogService.getLogger();
 
@@ -135,11 +130,6 @@ public class DescribeDiskStoreFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
   private void setDiskDirDetails(final DiskStore diskStore,
       final DiskStoreDetails diskStoreDetails) {
     File[] diskDirs = diskStore.getDiskDirs();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java
index 51fd394..bc5b872 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction.java
@@ -14,24 +14,18 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueImpl;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.commands.DestroyAsyncEventQueueCommand;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * Function used by the 'destroy async-event-queue' gfsh command to destroy an asynchronous event
  * queue on a member.
  */
-public class DestroyAsyncEventQueueFunction implements Function, InternalEntity {
+public class DestroyAsyncEventQueueFunction implements InternalFunction {
 
   private static final long serialVersionUID = -7754359270344102817L;
 
@@ -73,11 +67,6 @@ public class DestroyAsyncEventQueueFunction implements Function, InternalEntity
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE);
-  }
-
   XmlEntity getAEQXmlEntity(String key, String value) {
     XmlEntity xmlEntity = new XmlEntity(CacheXml.ASYNC_EVENT_QUEUE, key, value);
     return xmlEntity;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java
index 8b38e6a..c7690c3 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction.java
@@ -14,26 +14,20 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.DiskStore;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * Function used by the 'destroy disk-store' gfsh command to destroy a disk store on each member.
  *
  * @since GemFire 8.0
  */
-public class DestroyDiskStoreFunction implements Function, InternalEntity {
+public class DestroyDiskStoreFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
   @Override
@@ -74,10 +68,4 @@ public class DestroyDiskStoreFunction implements Function, InternalEntity {
     }
     context.getResultSender().lastResult(result);
   }
-
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_DISK);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
index d3b445e..e1699b7 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
@@ -14,26 +14,21 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.query.Index;
 import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.domain.IndexInfo;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class DestroyIndexFunction implements Function, InternalEntity {
+public class DestroyIndexFunction implements InternalFunction {
   private static final long serialVersionUID = -868082551095130315L;
 
   @Override
@@ -105,11 +100,6 @@ public class DestroyIndexFunction implements Function, InternalEntity {
     context.getResultSender().lastResult(result);
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_QUERY);
-  }
-
   /***
    *
    * @param name
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportConfigFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportConfigFunction.java
index fe210f2..17a9b1f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportConfigFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportConfigFunction.java
@@ -16,8 +16,6 @@ package org.apache.geode.management.internal.cli.functions;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 
 import org.apache.logging.log4j.Logger;
@@ -25,19 +23,16 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.ConfigSource;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class ExportConfigFunction implements Function, InternalEntity {
+public class ExportConfigFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = ExportConfigFunction.class.getName();
@@ -119,11 +114,6 @@ public class ExportConfigFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java
index cc25452..9758083 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java
@@ -15,21 +15,16 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.snapshot.RegionSnapshotService;
 import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.cache.snapshot.SnapshotOptions.SnapshotFormat;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.snapshot.SnapshotOptionsImpl;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /***
  * Function which carries out the export of a region to a file on a member. Uses the
@@ -37,7 +32,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  *
  */
-public class ExportDataFunction implements Function, InternalEntity {
+public class ExportDataFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
   public void execute(FunctionContext context) {
@@ -76,11 +71,6 @@ public class ExportDataFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.DATA_READ);
-  }
-
   public String getId() {
     return ExportDataFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
index ab9c95b..e929cd7 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
@@ -25,8 +25,6 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.Level;
@@ -36,12 +34,11 @@ import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.Scope;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalRegionArguments;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogLevel;
 import org.apache.geode.management.internal.cli.commands.ExportLogsCommand;
@@ -49,8 +46,6 @@ import org.apache.geode.management.internal.cli.util.ExportLogsCacheWriter;
 import org.apache.geode.management.internal.cli.util.LogExporter;
 import org.apache.geode.management.internal.cli.util.LogFilter;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * this function extracts the logs using a LogExporter which creates a zip file, and then writes the
@@ -59,7 +54,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  * The function only extracts .log and .gfs files under server's working directory
  */
-public class ExportLogsFunction implements Function, InternalEntity {
+public class ExportLogsFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String EXPORT_LOGS_REGION = "__exportLogsRegion";
@@ -123,11 +118,6 @@ public class ExportLogsFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
   public static Region createOrGetExistingExportLogsRegion(boolean isInitiatingMember,
       InternalCache cache) throws IOException, ClassNotFoundException {
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java
index 584f558..6b65a6b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction.java
@@ -15,8 +15,6 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -25,21 +23,18 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheListener;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.AbstractRegion;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.domain.ClassName;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  *
  * @since GemFire 7.0
  */
-public class FetchRegionAttributesFunction implements Function, InternalEntity {
+public class FetchRegionAttributesFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = 4366812590788342070L;
@@ -124,11 +119,6 @@ public class FetchRegionAttributesFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java
index 3bad85e..796b971 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java
@@ -14,23 +14,16 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.commons.lang.StringUtils;
 
-import org.apache.geode.cache.execute.FunctionAdapter;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.configuration.domain.SharedConfigurationStatus;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class FetchSharedConfigurationStatusFunction extends FunctionAdapter
-    implements InternalEntity {
+public class FetchSharedConfigurationStatusFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -51,11 +44,6 @@ public class FetchSharedConfigurationStatusFunction extends FunctionAdapter
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return FetchSharedConfigurationStatusFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
index 48a8153..fc00710 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction.java
@@ -14,20 +14,15 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.util.BytesToString;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  *
@@ -36,7 +31,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  *
  */
-public class GarbageCollectionFunction implements Function, InternalEntity {
+public class GarbageCollectionFunction implements InternalFunction {
   public static final String ID = GarbageCollectionFunction.class.getName();
 
   private static final long serialVersionUID = 1L;
@@ -71,12 +66,6 @@ public class GarbageCollectionFunction implements Function, InternalEntity {
     context.getResultSender().lastResult(resultMap);
   }
 
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE);
-  }
-
   @Override
   public String getId() {
     return GarbageCollectionFunction.ID;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java
index dd01f28..94186a1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -23,25 +21,22 @@ import joptsimple.internal.Strings;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.wan.GatewayReceiver;
 import org.apache.geode.cache.wan.GatewayReceiverFactory;
 import org.apache.geode.cache.wan.GatewayTransportFilter;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * The function to a create GatewayReceiver using given configuration parameters.
  */
-public class GatewayReceiverCreateFunction implements Function, InternalEntity {
+public class GatewayReceiverCreateFunction implements InternalFunction {
 
   private static final Logger logger = LogService.getLogger();
 
@@ -91,11 +86,6 @@ public class GatewayReceiverCreateFunction implements Function, InternalEntity {
 
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_GATEWAY);
-  }
-
   /**
    * GatewayReceiver creation happens here.
    *
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction.java
index 8c2a5ea..8d2d486 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction.java
@@ -14,13 +14,9 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.wan.GatewayEventFilter;
@@ -29,15 +25,13 @@ import org.apache.geode.cache.wan.GatewaySender.OrderPolicy;
 import org.apache.geode.cache.wan.GatewaySenderFactory;
 import org.apache.geode.cache.wan.GatewayTransportFilter;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class GatewaySenderCreateFunction implements Function, InternalEntity {
+public class GatewaySenderCreateFunction implements InternalFunction {
 
   private static final Logger logger = LogService.getLogger();
 
@@ -71,11 +65,6 @@ public class GatewaySenderCreateFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_GATEWAY);
-  }
-
   /**
    * Creates the GatewaySender with given configuration.
    *
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
index 99a134e..5f72f34 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction.java
@@ -14,22 +14,16 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.wan.GatewaySender;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class GatewaySenderDestroyFunction implements Function, InternalEntity {
+public class GatewaySenderDestroyFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
   private static final String ID = GatewaySenderDestroyFunction.class.getName();
   public static GatewaySenderDestroyFunction INSTANCE = new GatewaySenderDestroyFunction();
@@ -71,11 +65,6 @@ public class GatewaySenderDestroyFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_GATEWAY);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction.java
index a7d40fe..7d29b48 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction.java
@@ -19,8 +19,6 @@ import static org.apache.geode.distributed.ConfigurationProperties.SOCKET_BUFFER
 import java.lang.management.ManagementFactory;
 import java.lang.management.RuntimeMXBean;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -28,26 +26,23 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.ConfigSource;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.CacheConfig;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.ha.HARegionQueue;
 import org.apache.geode.management.internal.cli.domain.MemberConfigurationInfo;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /****
  *
  *
  */
-public class GetMemberConfigInformationFunction implements Function, InternalEntity {
+public class GetMemberConfigInformationFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
 
@@ -138,11 +133,6 @@ public class GetMemberConfigInformationFunction implements Function, InternalEnt
     context.getResultSender().lastResult(memberConfigInfo);
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
   /****
    * Gets the default values for the cache attributes
    *
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberInformationFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberInformationFunction.java
index b0bffe7..fa8b9c6 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberInformationFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetMemberInformationFunction.java
@@ -17,35 +17,30 @@ package org.apache.geode.management.internal.cli.functions;
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryMXBean;
 import java.lang.management.MemoryUsage;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.CacheClientStatus;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.tier.InternalClientMembership;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.domain.CacheServerInfo;
 import org.apache.geode.management.internal.cli.domain.MemberInformation;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /***
  *
  * since 7.0
  */
 
-public class GetMemberInformationFunction implements Function, InternalEntity {
+public class GetMemberInformationFunction implements InternalFunction {
   /**
    *
    */
@@ -143,11 +138,6 @@ public class GetMemberInformationFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
   private long bytesToMeg(long bytes) {
     return bytes / (1024L * 1024L);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java
index e3250be..f483cc8 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java
@@ -15,19 +15,13 @@
 package org.apache.geode.management.internal.cli.functions;
 
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.domain.RegionDescriptionPerMember;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class GetRegionDescriptionFunction implements Function, InternalEntity {
+public class GetRegionDescriptionFunction implements InternalFunction {
 
 
   private static final long serialVersionUID = 1L;
@@ -51,9 +45,4 @@ public class GetRegionDescriptionFunction implements Function, InternalEntity {
       context.getResultSender().sendException(e);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
index 110d4ff..fbdd9a4 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionsFunction.java
@@ -14,24 +14,19 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.domain.RegionInformation;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * Function that retrieves regions hosted on every member
  */
-public class GetRegionsFunction implements Function, InternalEntity {
+public class GetRegionsFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -56,9 +51,4 @@ public class GetRegionsFunction implements Function, InternalEntity {
       functionContext.getResultSender().sendException(e);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetStackTracesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetStackTracesFunction.java
index c2ae7d6..39ea54d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetStackTracesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetStackTracesFunction.java
@@ -15,19 +15,13 @@
 package org.apache.geode.management.internal.cli.functions;
 
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.OSProcess;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.domain.StackTracesPerMember;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class GetStackTracesFunction implements Function, InternalEntity {
+public class GetStackTracesFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -49,11 +43,6 @@ public class GetStackTracesFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     // TODO Auto-generated method stub
     return GetStackTracesFunction.class.getName();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java
index 2a3670a..b17a813 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java
@@ -14,30 +14,24 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.query.CqQuery;
 import org.apache.geode.cache.query.internal.CqQueryVsdStats;
 import org.apache.geode.cache.query.internal.cq.CqService;
 import org.apache.geode.cache.query.internal.cq.InternalCqQuery;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.domain.SubscriptionQueueSizeResult;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /***
  * Function to get subscription-queue-size
  *
  */
-public class GetSubscriptionQueueSizeFunction implements Function, InternalEntity {
+public class GetSubscriptionQueueSizeFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -103,11 +97,6 @@ public class GetSubscriptionQueueSizeFunction implements Function, InternalEntit
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return GetSubscriptionQueueSizeFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java
index 600d530..1d0248d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java
@@ -15,27 +15,22 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.snapshot.RegionSnapshotService;
 import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.cache.snapshot.SnapshotOptions.SnapshotFormat;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /****
  * Function which carries out the import of a region to a file on a member. Uses the
  * RegionSnapshotService to import the data
  *
  */
-public class ImportDataFunction implements Function, InternalEntity {
+public class ImportDataFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1L;
 
@@ -74,11 +69,6 @@ public class ImportDataFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.DATA_WRITE);
-  }
-
   public String getId() {
     return ImportDataFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction.java
index 00715e4..2bb4a50 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Properties;
 import java.util.Set;
 
@@ -26,15 +24,12 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.asyncqueue.AsyncEventListener;
 import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.Declarable2;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.domain.AsyncEventQueueDetails;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * An implementation of GemFire Function interface used to determine all the async event queues that
@@ -43,7 +38,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  * @since GemFire 8.0
  */
-public class ListAsyncEventQueuesFunction implements Function, InternalEntity {
+public class ListAsyncEventQueuesFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = 1L;
@@ -103,9 +98,4 @@ public class ListAsyncEventQueuesFunction implements Function, InternalEntity {
       context.getResultSender().lastResult(result);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDeployedFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDeployedFunction.java
index 3ae31c4..2734df5 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDeployedFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDeployedFunction.java
@@ -14,27 +14,22 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.DeployedJar;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.JarDeployer;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class ListDeployedFunction implements Function, InternalEntity {
+public class ListDeployedFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = ListDeployedFunction.class.getName();
@@ -86,11 +81,6 @@ public class ListDeployedFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction.java
index b38219f..940a7f5 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction.java
@@ -15,22 +15,17 @@
 
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.DiskStore;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.domain.DiskStoreDetails;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * The ListDiskStoresFunction class is an implementation of GemFire Function interface used to
@@ -46,7 +41,7 @@ import org.apache.geode.security.ResourcePermission;
  * @see org.apache.geode.management.internal.cli.domain.DiskStoreDetails
  * @since GemFire 7.0
  */
-public class ListDiskStoresFunction implements Function, InternalEntity {
+public class ListDiskStoresFunction implements InternalFunction {
 
   @SuppressWarnings("unused")
   public void init(final Properties props) {}
@@ -77,9 +72,4 @@ public class ListDiskStoresFunction implements Function, InternalEntity {
       context.getResultSender().sendException(e);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java
index 6952c5f..0d02ccd 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java
@@ -16,23 +16,18 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.query.internal.cq.CqService;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.domain.DurableCqNamesResult;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * The ListDurableCqs class is a GemFire function used to collect all the durable client names on
@@ -48,7 +43,7 @@ import org.apache.geode.security.ResourcePermission;
  * @since GemFire 7.0.1
  */
 @SuppressWarnings("unused")
-public class ListDurableCqNamesFunction implements Function, InternalEntity {
+public class ListDurableCqNamesFunction implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
   public String getId() {
@@ -93,9 +88,4 @@ public class ListDurableCqNamesFunction implements Function, InternalEntity {
       context.getResultSender().lastResult(result);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListFunctionFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListFunctionFunction.java
index 87f22c8..65c311c 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListFunctionFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListFunctionFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -31,12 +29,10 @@ import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class ListFunctionFunction implements Function, InternalEntity {
+public class ListFunctionFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = ListFunctionFunction.class.getName();
@@ -95,11 +91,6 @@ public class ListFunctionFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListIndexFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListIndexFunction.java
index d1a96e2..8967cd7 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListIndexFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListIndexFunction.java
@@ -15,20 +15,15 @@
 
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.query.Index;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.domain.IndexDetails;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * The ListIndexFunction class is a GemFire function used to collect all the index information on
@@ -44,7 +39,7 @@ import org.apache.geode.security.ResourcePermission;
  * @since GemFire 7.0
  */
 @SuppressWarnings("unused")
-public class ListIndexFunction implements Function, InternalEntity {
+public class ListIndexFunction implements InternalFunction {
 
   public String getId() {
     return ListIndexFunction.class.getName();
@@ -66,9 +61,4 @@ public class ListIndexFunction implements Function, InternalEntity {
       context.getResultSender().sendException(e);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ_QUERY);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/NetstatFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/NetstatFunction.java
index 7b59b98..d1a7612 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/NetstatFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/NetstatFunction.java
@@ -27,24 +27,19 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.CliUtil.DeflaterInflaterData;
 import org.apache.geode.management.internal.cli.GfshParser;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * Executes 'netstat' OS command & returns the result as compressed bytes.
@@ -52,7 +47,7 @@ import org.apache.geode.security.ResourcePermission;
  * @since GemFire 7.0
  */
 @SuppressWarnings({"serial"})
-public class NetstatFunction implements Function, InternalEntity {
+public class NetstatFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
   private static final long serialVersionUID = 1L;
 
@@ -93,11 +88,6 @@ public class NetstatFunction implements Function, InternalEntity {
     context.getResultSender().lastResult(result);
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
   private static void addMemberHostHeader(final StringBuilder netstatInfo, final String id,
       final String host, final String lineSeparator) {
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RebalanceFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RebalanceFunction.java
index dfdd9d2..2434a22 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RebalanceFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RebalanceFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.Set;
 import java.util.concurrent.CancellationException;
@@ -27,16 +25,13 @@ import org.apache.geode.cache.control.RebalanceFactory;
 import org.apache.geode.cache.control.RebalanceOperation;
 import org.apache.geode.cache.control.RebalanceResults;
 import org.apache.geode.cache.control.ResourceManager;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.partition.PartitionRebalanceInfo;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 
-public class RebalanceFunction implements Function, InternalEntity {
+public class RebalanceFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = RebalanceFunction.class.getName();
@@ -95,11 +90,6 @@ public class RebalanceFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.DATA_MANAGE);
-  }
-
-  @Override
   public String getId() {
     return RebalanceFunction.ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java
index c704a3a..84dd2b1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
@@ -27,12 +25,11 @@ import org.apache.geode.cache.CacheListener;
 import org.apache.geode.cache.CacheLoader;
 import org.apache.geode.cache.CacheWriter;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.AbstractRegion;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.cli.CliUtil;
@@ -40,15 +37,13 @@ import org.apache.geode.management.internal.cli.domain.ClassName;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.util.RegionPath;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * Function used by the 'alter region' gfsh command to alter a region on each member.
  *
  * @since GemFire 8.0
  */
-public class RegionAlterFunction implements Function, InternalEntity {
+public class RegionAlterFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = -4846425364943216425L;
@@ -98,11 +93,6 @@ public class RegionAlterFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.DATA_MANAGE);
-  }
-
   private <K, V> Region<?, ?> alterRegion(Cache cache, RegionFunctionArgs regionAlterArgs) {
     final String regionPathString = regionAlterArgs.getRegionPath();
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
index dadca7e..b8d0b10 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
@@ -15,8 +15,6 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -38,13 +36,12 @@ import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.cache.RegionExistsException;
 import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.RegionShortcut;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.util.ObjectSizer;
 import org.apache.geode.compression.Compressor;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.geode.internal.logging.LogService;
@@ -54,14 +51,12 @@ import org.apache.geode.management.internal.cli.domain.ClassName;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.cli.util.RegionPath;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  *
  * @since GemFire 7.0
  */
-public class RegionCreateFunction implements Function, InternalEntity {
+public class RegionCreateFunction implements InternalFunction {
 
   private static final Logger logger = LogService.getLogger();
 
@@ -128,11 +123,6 @@ public class RegionCreateFunction implements Function, InternalEntity {
     }
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singletonList(ResourcePermissions.DATA_MANAGE);
-  }
-
   private CliFunctionResult handleException(final String memberNameOrId, final String exceptionMsg,
       final Exception e) {
     if (e != null && logger.isDebugEnabled()) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
index 06e2ff6..b3d812a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
@@ -14,26 +14,20 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionDestroyedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  *
  * @since GemFire 7.0
  */
-public class RegionDestroyFunction implements Function, InternalEntity {
+public class RegionDestroyFunction implements InternalFunction {
   private static final long serialVersionUID = 9172773671865750685L;
 
   public static final RegionDestroyFunction INSTANCE = new RegionDestroyFunction();
@@ -92,11 +86,6 @@ public class RegionDestroyFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.DATA_MANAGE);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
index c5dd3b5..4b1ff1f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction.java
@@ -14,27 +14,22 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PartitionedRegion;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.partitioned.ColocatedRegionDetails;
 import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class ShowMissingDiskStoresFunction implements Function, InternalEntity {
+public class ShowMissingDiskStoresFunction implements InternalFunction {
 
   @Override
   public void execute(FunctionContext context) {
@@ -89,11 +84,6 @@ public class ShowMissingDiskStoresFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return getClass().getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShutDownFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShutDownFunction.java
index c3b01e7..bd5de57 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShutDownFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ShutDownFunction.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -23,14 +21,11 @@ import java.util.concurrent.Future;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.tcp.ConnectionTable;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  *
@@ -39,7 +34,7 @@ import org.apache.geode.security.ResourcePermission;
  *
  *
  */
-public class ShutDownFunction implements Function, InternalEntity {
+public class ShutDownFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = ShutDownFunction.class.getName();
@@ -97,11 +92,6 @@ public class ShutDownFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE);
-  }
-
-  @Override
   public boolean hasResult() {
     return true;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java
index edae35d..cfdad78 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java
@@ -16,26 +16,21 @@ package org.apache.geode.management.internal.cli.functions;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.ManagementException;
 import org.apache.geode.management.internal.cli.util.BytesToString;
 import org.apache.geode.management.internal.cli.util.LogExporter;
 import org.apache.geode.management.internal.cli.util.LogFilter;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class SizeExportLogsFunction extends ExportLogsFunction implements Function, InternalEntity {
+public class SizeExportLogsFunction extends ExportLogsFunction implements InternalFunction {
   private static final Logger LOGGER = LogService.getLogger();
   private static final long serialVersionUID = 1L;
 
@@ -97,9 +92,4 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi
 
     return estimatedSize;
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UndeployFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UndeployFunction.java
index 73c92dc..858fd6f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UndeployFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UndeployFunction.java
@@ -15,8 +15,6 @@
 package org.apache.geode.management.internal.cli.functions;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.lang.ArrayUtils;
@@ -24,19 +22,16 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.DeployedJar;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.JarDeployer;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class UndeployFunction implements Function, InternalEntity {
+public class UndeployFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   public static final String ID = UndeployFunction.class.getName();
@@ -112,11 +107,6 @@ public class UndeployFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_DEPLOY);
-  }
-
-  @Override
   public String getId() {
     return ID;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UnregisterFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UnregisterFunction.java
index 6bbdc1a..0ec8ab3 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UnregisterFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UnregisterFunction.java
@@ -14,17 +14,11 @@
  */
 package org.apache.geode.management.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionService;
-import org.apache.geode.internal.InternalEntity;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
-public class UnregisterFunction implements Function, InternalEntity {
+public class UnregisterFunction implements InternalFunction {
   public static final String ID = UnregisterFunction.class.getName();
   private static final long serialVersionUID = 1L;
 
@@ -46,11 +40,6 @@ public class UnregisterFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE_DEPLOY);
-  }
-
-  @Override
   public boolean hasResult() {
     return true;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java
index a2f4d55..14cd821 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java
@@ -34,8 +34,8 @@ import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
@@ -45,7 +45,7 @@ import org.apache.geode.security.ResourcePermission;
 /**
  * @since GemFire 7.0
  */
-public class UserFunctionExecution implements Function<Object[]>, InternalEntity {
+public class UserFunctionExecution implements InternalFunction<Object[]> {
   public static final String ID = UserFunctionExecution.class.getName();
 
   private static Logger logger = LogService.getLogger();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/DownloadJarFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/DownloadJarFunction.java
index 730ee11..345f144 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/DownloadJarFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/DownloadJarFunction.java
@@ -20,8 +20,6 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.rmi.RemoteException;
-import java.util.Collection;
-import java.util.Collections;
 
 import com.healthmarketscience.rmiio.RemoteInputStream;
 import com.healthmarketscience.rmiio.RemoteInputStreamServer;
@@ -29,19 +27,16 @@ import com.healthmarketscience.rmiio.SimpleRemoteInputStream;
 import com.healthmarketscience.rmiio.exporter.RemoteStreamExporter;
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionException;
 import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.ClusterConfigurationService;
 import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.SystemManagementService;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class DownloadJarFunction implements Function<Object[]>, InternalEntity {
+public class DownloadJarFunction implements InternalFunction<Object[]> {
   private static final Logger logger = LogService.getLogger();
 
   private static final long serialVersionUID = 1L;
@@ -89,11 +84,6 @@ public class DownloadJarFunction implements Function<Object[]>, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return DownloadJarFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetClusterConfigurationFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetClusterConfigurationFunction.java
index 9184a3f..0f9addc 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetClusterConfigurationFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetClusterConfigurationFunction.java
@@ -16,23 +16,18 @@
 package org.apache.geode.management.internal.configuration.functions;
 
 import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.ClusterConfigurationService;
 import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.internal.configuration.messages.ConfigurationResponse;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class GetClusterConfigurationFunction implements Function, InternalEntity {
+public class GetClusterConfigurationFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
 
   @Override
@@ -53,12 +48,4 @@ public class GetClusterConfigurationFunction implements Function, InternalEntity
       context.getResultSender().lastResult(e);
     }
   }
-
-  /**
-   * this function will return all cluster config which will potentially leak security information.
-   * Thus we require all permissions to execute this function
-   **/
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.ALL);
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java
index 1ecc410..4a123a5 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java
@@ -16,20 +16,15 @@ package org.apache.geode.management.internal.configuration.functions;
 
 import static java.util.stream.Collectors.toSet;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.Set;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalRegion;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
-public class GetRegionNamesFunction implements Function, InternalEntity {
+public class GetRegionNamesFunction implements InternalFunction {
   @Override
   public void execute(FunctionContext context) {
     InternalCache cache = GemFireCacheImpl.getInstance();
@@ -41,11 +36,6 @@ public class GetRegionNamesFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_READ);
-  }
-
-  @Override
   public String getId() {
     return GetRegionNamesFunction.class.getName();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/RecreateCacheFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/RecreateCacheFunction.java
index 075d76f..1c0b40b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/RecreateCacheFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/RecreateCacheFunction.java
@@ -14,21 +14,15 @@
  */
 package org.apache.geode.management.internal.configuration.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.CacheConfig;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
-import org.apache.geode.management.internal.security.ResourcePermissions;
-import org.apache.geode.security.ResourcePermission;
 
-public class RecreateCacheFunction implements Function, InternalEntity {
+public class RecreateCacheFunction implements InternalFunction {
   @Override
   public void execute(FunctionContext context) {
     CliFunctionResult result = null;
@@ -48,11 +42,6 @@ public class RecreateCacheFunction implements Function, InternalEntity {
   }
 
   @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(ResourcePermissions.CLUSTER_MANAGE);
-  }
-
-  @Override
   public String getId() {
     return RecreateCacheFunction.class.getName();
   }
diff --git a/geode-core/src/test/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java b/geode-core/src/test/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java
index 729abf9..8b7cf2d 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/execute/CoreFunctionSecurityTest.java
@@ -103,57 +103,57 @@ public class CoreFunctionSecurityTest {
 
   @BeforeClass
   public static void setupClass() {
-    functionStringMap.put(new AlterRuntimeConfigFunction(), "CLUSTER:WRITE");
-    functionStringMap.put(new ChangeLogLevelFunction(), "CLUSTER:WRITE");
-    functionStringMap.put(new CloseDurableClientFunction(), "CLUSTER:MANAGE:QUERY");
-    functionStringMap.put(new CloseDurableCqFunction(), "CLUSTER:MANAGE:QUERY");
-    functionStringMap.put(new ContinuousQueryFunction(), "CLUSTER:READ");
-    functionStringMap.put(new CreateAsyncEventQueueFunction(), "CLUSTER:MANAGE:DEPLOY");
-    functionStringMap.put(new CreateDefinedIndexesFunction(), "CLUSTER:MANAGE:QUERY");
-    functionStringMap.put(new CreateDiskStoreFunction(), "CLUSTER:MANAGE:DISK");
-    functionStringMap.put(new CreateIndexFunction(), "CLUSTER:MANAGE:QUERY");
-    functionStringMap.put(new DataCommandFunction(), "DATA");
-    functionStringMap.put(new DeployFunction(), "CLUSTER:MANAGE:DEPLOY");
-    functionStringMap.put(new DescribeDiskStoreFunction(), "CLUSTER:READ");
-    functionStringMap.put(new DestroyAsyncEventQueueFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new DestroyDiskStoreFunction(), "CLUSTER:MANAGE:DISK");
-    functionStringMap.put(new DestroyIndexFunction(), "CLUSTER:MANAGE:QUERY");
-    functionStringMap.put(new ExportConfigFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ExportDataFunction(), "DATA:READ");
-    functionStringMap.put(new ExportLogsFunction(), "CLUSTER:READ");
-    functionStringMap.put(new FetchRegionAttributesFunction(), "CLUSTER:READ");
-    functionStringMap.put(new FetchSharedConfigurationStatusFunction(), "CLUSTER:READ");
-    functionStringMap.put(new GarbageCollectionFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new GatewayReceiverCreateFunction(), "CLUSTER:MANAGE:GATEWAY");
-    functionStringMap.put(new GatewaySenderCreateFunction(), "CLUSTER:MANAGE:GATEWAY");
-    functionStringMap.put(new GatewaySenderDestroyFunction(), "CLUSTER:MANAGE:GATEWAY");
+    functionStringMap.put(new AlterRuntimeConfigFunction(), "*");
+    functionStringMap.put(new ChangeLogLevelFunction(), "*");
+    functionStringMap.put(new CloseDurableClientFunction(), "*");
+    functionStringMap.put(new CloseDurableCqFunction(), "*");
+    functionStringMap.put(new ContinuousQueryFunction(), "*");
+    functionStringMap.put(new CreateAsyncEventQueueFunction(), "*");
+    functionStringMap.put(new CreateDefinedIndexesFunction(), "*");
+    functionStringMap.put(new CreateDiskStoreFunction(), "*");
+    functionStringMap.put(new CreateIndexFunction(), "*");
+    functionStringMap.put(new DataCommandFunction(), "*");
+    functionStringMap.put(new DeployFunction(), "*");
+    functionStringMap.put(new DescribeDiskStoreFunction(), "*");
+    functionStringMap.put(new DestroyAsyncEventQueueFunction(), "*");
+    functionStringMap.put(new DestroyDiskStoreFunction(), "*");
+    functionStringMap.put(new DestroyIndexFunction(), "*");
+    functionStringMap.put(new ExportConfigFunction(), "*");
+    functionStringMap.put(new ExportDataFunction(), "*");
+    functionStringMap.put(new ExportLogsFunction(), "*");
+    functionStringMap.put(new FetchRegionAttributesFunction(), "*");
+    functionStringMap.put(new FetchSharedConfigurationStatusFunction(), "*");
+    functionStringMap.put(new GarbageCollectionFunction(), "*");
+    functionStringMap.put(new GatewayReceiverCreateFunction(), "*");
+    functionStringMap.put(new GatewaySenderCreateFunction(), "*");
+    functionStringMap.put(new GatewaySenderDestroyFunction(), "*");
     functionStringMap.put(new GetClusterConfigurationFunction(), "*");
-    functionStringMap.put(new GetMemberConfigInformationFunction(), "CLUSTER:READ");
-    functionStringMap.put(new GetMemberInformationFunction(), "CLUSTER:READ");
-    functionStringMap.put(new GetRegionDescriptionFunction(), "CLUSTER:READ");
-    functionStringMap.put(new GetRegionsFunction(), "CLUSTER:READ");
-    functionStringMap.put(new GetStackTracesFunction(), "CLUSTER:READ");
-    functionStringMap.put(new GetSubscriptionQueueSizeFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ImportDataFunction(), "DATA:WRITE");
-    functionStringMap.put(new ListAsyncEventQueuesFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ListDeployedFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ListDiskStoresFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ListDurableCqNamesFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ListFunctionFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ListIndexFunction(), "CLUSTER:READ:QUERY");
-    functionStringMap.put(new NetstatFunction(), "CLUSTER:READ");
-    functionStringMap.put(new RebalanceFunction(), "DATA:MANAGE");
-    functionStringMap.put(new RegionAlterFunction(), "DATA:MANAGE");
-    functionStringMap.put(new RegionCreateFunction(), "DATA:MANAGE");
-    functionStringMap.put(new RegionDestroyFunction(), "DATA:MANAGE");
-    functionStringMap.put(new ShowMissingDiskStoresFunction(), "CLUSTER:READ");
-    functionStringMap.put(new ShutDownFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new SizeExportLogsFunction(), "CLUSTER:READ");
-    functionStringMap.put(new UndeployFunction(), "CLUSTER:MANAGE:DEPLOY");
-    functionStringMap.put(new UnregisterFunction(), "CLUSTER:MANAGE:DEPLOY");
-    functionStringMap.put(new GetRegionNamesFunction(), "CLUSTER:READ");
-    functionStringMap.put(new RecreateCacheFunction(), "CLUSTER:MANAGE");
-    functionStringMap.put(new DownloadJarFunction(), "CLUSTER:READ");
+    functionStringMap.put(new GetMemberConfigInformationFunction(), "*");
+    functionStringMap.put(new GetMemberInformationFunction(), "*");
+    functionStringMap.put(new GetRegionDescriptionFunction(), "*");
+    functionStringMap.put(new GetRegionsFunction(), "*");
+    functionStringMap.put(new GetStackTracesFunction(), "*");
+    functionStringMap.put(new GetSubscriptionQueueSizeFunction(), "*");
+    functionStringMap.put(new ImportDataFunction(), "*");
+    functionStringMap.put(new ListAsyncEventQueuesFunction(), "*");
+    functionStringMap.put(new ListDeployedFunction(), "*");
+    functionStringMap.put(new ListDiskStoresFunction(), "*");
+    functionStringMap.put(new ListDurableCqNamesFunction(), "*");
+    functionStringMap.put(new ListFunctionFunction(), "*");
+    functionStringMap.put(new ListIndexFunction(), "*");
+    functionStringMap.put(new NetstatFunction(), "*");
+    functionStringMap.put(new RebalanceFunction(), "*");
+    functionStringMap.put(new RegionAlterFunction(), "*");
+    functionStringMap.put(new RegionCreateFunction(), "*");
+    functionStringMap.put(new RegionDestroyFunction(), "*");
+    functionStringMap.put(new ShowMissingDiskStoresFunction(), "*");
+    functionStringMap.put(new ShutDownFunction(), "*");
+    functionStringMap.put(new SizeExportLogsFunction(), "*");
+    functionStringMap.put(new UndeployFunction(), "*");
+    functionStringMap.put(new UnregisterFunction(), "*");
+    functionStringMap.put(new GetRegionNamesFunction(), "*");
+    functionStringMap.put(new RecreateCacheFunction(), "*");
+    functionStringMap.put(new DownloadJarFunction(), "*");
 
     functionStringMap.keySet().forEach(FunctionService::registerFunction);
   }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java
index a22b381..a2e2f32 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneCreateIndexFunction.java
@@ -18,9 +18,6 @@ package org.apache.geode.cache.lucene.internal.cli.functions;
 import static org.apache.geode.cache.lucene.internal.LuceneServiceImpl.validateCommandParameters.INDEX_NAME;
 import static org.apache.geode.cache.lucene.internal.LuceneServiceImpl.validateCommandParameters.REGION_PATH;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -36,17 +33,13 @@ import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.cli.LuceneCliStrings;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexDetails;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexInfo;
-import org.apache.geode.cache.lucene.internal.security.LucenePermission;
-import org.apache.geode.cache.lucene.internal.xml.LuceneXmlConstants;
 import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
 
 
 /**
@@ -61,7 +54,7 @@ import org.apache.geode.security.ResourcePermission.Resource;
  * @see LuceneIndexDetails
  */
 @SuppressWarnings("unused")
-public class LuceneCreateIndexFunction implements InternalEntity, Function {
+public class LuceneCreateIndexFunction implements InternalFunction {
 
   private static final long serialVersionUID = 3061443846664615818L;
 
@@ -129,12 +122,6 @@ public class LuceneCreateIndexFunction implements InternalEntity, Function {
     return new XmlEntity(CacheXml.REGION, "name", regionName);
   }
 
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(
-        new ResourcePermission(Resource.CLUSTER, Operation.MANAGE, LucenePermission.TARGET));
-  }
-
   private LuceneSerializer toSerializer(String serializerName)
       throws InstantiationException, IllegalAccessException, ClassNotFoundException {
     String trimmedName = StringUtils.trim(serializerName);
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDescribeIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDescribeIndexFunction.java
index 8f9bac3..c847c72 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDescribeIndexFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDescribeIndexFunction.java
@@ -15,9 +15,6 @@
 
 package org.apache.geode.cache.lucene.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
@@ -28,11 +25,8 @@ import org.apache.geode.cache.lucene.internal.LuceneIndexImpl;
 import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexDetails;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexInfo;
-import org.apache.geode.cache.lucene.internal.security.LucenePermission;
 import org.apache.geode.internal.InternalEntity;
-import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
 /**
  * The LuceneDescribeIndexFunction class is a function used to collect the information on a
@@ -48,7 +42,7 @@ import org.apache.geode.security.ResourcePermission.Resource;
  * @see LuceneIndexInfo
  */
 @SuppressWarnings("unused")
-public class LuceneDescribeIndexFunction implements InternalEntity, Function {
+public class LuceneDescribeIndexFunction implements InternalFunction {
 
   private static final long serialVersionUID = 1776072528558670172L;
 
@@ -73,10 +67,4 @@ public class LuceneDescribeIndexFunction implements InternalEntity, Function {
     }
     context.getResultSender().lastResult(result);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(
-        new ResourcePermission(Resource.CLUSTER, Operation.READ, LucenePermission.TARGET));
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDestroyIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDestroyIndexFunction.java
index 1a12894..0583b52 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDestroyIndexFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneDestroyIndexFunction.java
@@ -14,28 +14,20 @@
  */
 package org.apache.geode.cache.lucene.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
-
 import org.apache.commons.lang.StringUtils;
 
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.lucene.LuceneService;
 import org.apache.geode.cache.lucene.LuceneServiceProvider;
 import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.cli.LuceneDestroyIndexInfo;
-import org.apache.geode.cache.lucene.internal.security.LucenePermission;
 import org.apache.geode.cache.lucene.internal.xml.LuceneXmlConstants;
-import org.apache.geode.internal.InternalEntity;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
-import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
 
-public class LuceneDestroyIndexFunction implements Function, InternalEntity {
+public class LuceneDestroyIndexFunction implements InternalFunction {
   public void execute(final FunctionContext context) {
     CliFunctionResult result;
     String memberId = context.getCache().getDistributedSystem().getDistributedMember().getId();
@@ -72,10 +64,4 @@ public class LuceneDestroyIndexFunction implements Function, InternalEntity {
     return new XmlEntity(CacheXml.REGION, "name", regionName, LuceneXmlConstants.PREFIX,
         LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, "name", indexName);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(
-        new ResourcePermission(Resource.CLUSTER, Operation.MANAGE, LucenePermission.TARGET));
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneListIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneListIndexFunction.java
index 31c8122..a4d7193 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneListIndexFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneListIndexFunction.java
@@ -15,8 +15,6 @@
 
 package org.apache.geode.cache.lucene.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -29,11 +27,8 @@ import org.apache.geode.cache.lucene.internal.LuceneIndexCreationProfile;
 import org.apache.geode.cache.lucene.internal.LuceneIndexImpl;
 import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexDetails;
-import org.apache.geode.cache.lucene.internal.security.LucenePermission;
 import org.apache.geode.internal.InternalEntity;
-import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
 /**
  * The LuceneListIndexFunction class is a function used to collect the information on all lucene
@@ -48,7 +43,7 @@ import org.apache.geode.security.ResourcePermission.Resource;
  * @see LuceneIndexDetails
  */
 @SuppressWarnings("unused")
-public class LuceneListIndexFunction implements InternalEntity, Function {
+public class LuceneListIndexFunction implements InternalFunction {
 
   private static final long serialVersionUID = -2320432506763893879L;
 
@@ -70,10 +65,4 @@ public class LuceneListIndexFunction implements InternalEntity, Function {
     }
     context.getResultSender().lastResult(indexDetailsSet);
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(
-        new ResourcePermission(Resource.CLUSTER, Operation.READ, LucenePermission.TARGET));
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneSearchIndexFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneSearchIndexFunction.java
index c043388..1e0dbd1 100755
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneSearchIndexFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/functions/LuceneSearchIndexFunction.java
@@ -15,8 +15,6 @@
 
 package org.apache.geode.cache.lucene.internal.cli.functions;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -24,20 +22,13 @@ import java.util.Set;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.cache.lucene.LuceneQuery;
-import org.apache.geode.cache.lucene.LuceneQueryException;
-import org.apache.geode.cache.lucene.LuceneResultStruct;
-import org.apache.geode.cache.lucene.LuceneService;
-import org.apache.geode.cache.lucene.LuceneServiceProvider;
-import org.apache.geode.cache.lucene.PageableLuceneQueryResults;
+import org.apache.geode.cache.lucene.*;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexDetails;
 import org.apache.geode.cache.lucene.internal.cli.LuceneIndexInfo;
 import org.apache.geode.cache.lucene.internal.cli.LuceneQueryInfo;
 import org.apache.geode.cache.lucene.internal.cli.LuceneSearchResults;
 import org.apache.geode.internal.InternalEntity;
-import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
 /**
  * The LuceneSearchIndexFunction class is a function used to collect the information on a particular
@@ -53,7 +44,7 @@ import org.apache.geode.security.ResourcePermission.Resource;
  * @see LuceneIndexInfo
  */
 @SuppressWarnings("unused")
-public class LuceneSearchIndexFunction<K, V> implements InternalEntity, Function {
+public class LuceneSearchIndexFunction<K, V> implements InternalFunction {
 
   private static final long serialVersionUID = 163818919780803222L;
 
@@ -98,9 +89,4 @@ public class LuceneSearchIndexFunction<K, V> implements InternalEntity, Function
       context.getResultSender().lastResult(result);
     }
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    return Collections.singleton(new ResourcePermission(Resource.DATA, Operation.READ, regionName));
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/directory/DumpDirectoryFiles.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/directory/DumpDirectoryFiles.java
index 4d720da..c1232c9 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/directory/DumpDirectoryFiles.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/directory/DumpDirectoryFiles.java
@@ -17,14 +17,11 @@ package org.apache.geode.cache.lucene.internal.directory;
 
 import java.io.File;
 import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.index.IndexWriter;
 
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionException;
 import org.apache.geode.cache.execute.RegionFunctionContext;
@@ -34,14 +31,11 @@ import org.apache.geode.cache.lucene.internal.InternalLuceneIndex;
 import org.apache.geode.cache.lucene.internal.filesystem.FileSystem;
 import org.apache.geode.cache.lucene.internal.repository.IndexRepository;
 import org.apache.geode.cache.lucene.internal.repository.RepositoryManager;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.BucketNotFoundException;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.security.ResourcePermission;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
 
-public class DumpDirectoryFiles implements Function, InternalEntity {
+public class DumpDirectoryFiles implements InternalFunction {
   private static final long serialVersionUID = 1L;
 
   private static final Logger logger = LogService.getLogger();
@@ -101,12 +95,4 @@ public class DumpDirectoryFiles implements Function, InternalEntity {
   public boolean optimizeForWrite() {
     return true;
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    Set<ResourcePermission> required = new HashSet<>();
-    required.add(new ResourcePermission(Resource.DATA, Operation.READ, regionName));
-    required.add(new ResourcePermission(Resource.CLUSTER, Operation.MANAGE));
-    return required;
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
index bc5ced6..e460533 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
@@ -18,14 +18,12 @@ package org.apache.geode.cache.lucene.internal.distributed;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.search.Query;
 
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionException;
 import org.apache.geode.cache.execute.RegionFunctionContext;
@@ -41,12 +39,11 @@ import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.repository.IndexRepository;
 import org.apache.geode.cache.lucene.internal.repository.IndexResultCollector;
 import org.apache.geode.cache.lucene.internal.repository.RepositoryManager;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.BucketNotFoundException;
 import org.apache.geode.internal.cache.PrimaryBucketException;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.execute.InternalFunctionInvocationTargetException;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * {@link LuceneQueryFunction} coordinates text search on a member. It receives text search query
@@ -54,7 +51,7 @@ import org.apache.geode.security.ResourcePermission;
  * and provides a result collector. The locally collected results are sent to the search
  * coordinator.
  */
-public class LuceneQueryFunction implements Function<LuceneFunctionContext>, InternalEntity {
+public class LuceneQueryFunction implements InternalFunction<LuceneFunctionContext> {
   private static final long serialVersionUID = 1L;
   public static final String ID = LuceneQueryFunction.class.getName();
 
@@ -176,11 +173,4 @@ public class LuceneQueryFunction implements Function<LuceneFunctionContext>, Int
   public boolean optimizeForWrite() {
     return true;
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    ResourcePermission read = new ResourcePermission(ResourcePermission.Resource.DATA,
-        ResourcePermission.Operation.READ, regionName);
-    return Collections.singleton(read);
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunction.java
index f0c88a4..0e84ad3 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunction.java
@@ -15,27 +15,23 @@
 
 package org.apache.geode.cache.lucene.internal.distributed;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueImpl;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.RegionFunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
-import org.apache.geode.internal.InternalEntity;
-import org.apache.geode.security.ResourcePermission;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 
 /**
  * {@link WaitUntilFlushedFunction} will check all the members with index to wait until the events
  * in current AEQs are flushed into index. This function enables an accessor and client to call to
  * make sure the current events are processed.
  */
-public class WaitUntilFlushedFunction implements Function<Object>, InternalEntity {
+public class WaitUntilFlushedFunction implements InternalFunction<Object> {
   private static final long serialVersionUID = 1L;
   public static final String ID = WaitUntilFlushedFunction.class.getName();
 
@@ -79,11 +75,4 @@ public class WaitUntilFlushedFunction implements Function<Object>, InternalEntit
   public boolean optimizeForWrite() {
     return true;
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    ResourcePermission read = new ResourcePermission(ResourcePermission.Resource.DATA,
-        ResourcePermission.Operation.READ, regionName);
-    return Collections.singleton(read);
-  }
 }
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/LuceneGetPageFunction.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/LuceneGetPageFunction.java
index 8e2bfcc..3ddbff3 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/LuceneGetPageFunction.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/LuceneGetPageFunction.java
@@ -15,8 +15,6 @@
 
 package org.apache.geode.cache.lucene.internal.results;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -24,23 +22,21 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.Region;
-import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.RegionFunctionContext;
 import org.apache.geode.cache.partition.PartitionRegionHelper;
-import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.EntrySnapshot;
 import org.apache.geode.internal.cache.PrimaryBucketException;
 import org.apache.geode.internal.cache.Token;
+import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.execute.InternalFunctionInvocationTargetException;
 import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.security.ResourcePermission;
 
 /**
  * {@link LuceneGetPageFunction} Returns the values of entries back to the user This behaves
  * basically like a getAll, but it does not invoke a cache loader
  */
-public class LuceneGetPageFunction implements Function<Object>, InternalEntity {
+public class LuceneGetPageFunction implements InternalFunction<Object> {
   private static final long serialVersionUID = 1L;
   public static final String ID = LuceneGetPageFunction.class.getName();
 
@@ -90,11 +86,4 @@ public class LuceneGetPageFunction implements Function<Object>, InternalEntity {
   public boolean optimizeForWrite() {
     return false;
   }
-
-  @Override
-  public Collection<ResourcePermission> getRequiredPermissions(String regionName) {
-    ResourcePermission read = new ResourcePermission(ResourcePermission.Resource.DATA,
-        ResourcePermission.Operation.READ, regionName);
-    return Collections.singleton(read);
-  }
 }
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneClientSecurityDUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneClientSecurityDUnitTest.java
index 378ea89..2ebe8a2 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneClientSecurityDUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneClientSecurityDUnitTest.java
@@ -136,8 +136,7 @@ public class LuceneClientSecurityDUnitTest extends LuceneQueriesAccessorBase {
   protected LuceneCommandsSecurityDUnitTest.UserNameAndExpectedResponse[] getSearchIndexUserNameAndExpectedResponses() {
     return new LuceneCommandsSecurityDUnitTest.UserNameAndExpectedResponse[] {
         new LuceneCommandsSecurityDUnitTest.UserNameAndExpectedResponse("nopermissions", true,
-            "nopermissions not authorized for DATA:READ"),
-        new LuceneCommandsSecurityDUnitTest.UserNameAndExpectedResponse("dataread" + REGION_NAME,
-            false, null)};
+            "nopermissions not authorized for *"),
+        new LuceneCommandsSecurityDUnitTest.UserNameAndExpectedResponse("*", false, null)};
   }
 }
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java
index fd4aa30..ab3c843 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/test/LuceneFunctionSecurityTest.java
@@ -60,14 +60,14 @@ public class LuceneFunctionSecurityTest {
 
   @BeforeClass
   public static void setupClass() {
-    functionStringMap.put(new LuceneCreateIndexFunction(), "CLUSTER:MANAGE:LUCENE");
-    functionStringMap.put(new LuceneDescribeIndexFunction(), "CLUSTER:READ:LUCENE");
-    functionStringMap.put(new LuceneDestroyIndexFunction(), "CLUSTER:MANAGE:LUCENE");
-    functionStringMap.put(new LuceneListIndexFunction(), "CLUSTER:READ:LUCENE");
-    functionStringMap.put(new LuceneSearchIndexFunction(), "DATA:READ:testRegion");
-    functionStringMap.put(new LuceneQueryFunction(), "DATA:READ:testRegion");
-    functionStringMap.put(new WaitUntilFlushedFunction(), "DATA:READ:testRegion");
-    functionStringMap.put(new LuceneGetPageFunction(), "DATA:READ:testRegion");
+    functionStringMap.put(new LuceneCreateIndexFunction(), "*");
+    functionStringMap.put(new LuceneDescribeIndexFunction(), "*");
+    functionStringMap.put(new LuceneDestroyIndexFunction(), "*");
+    functionStringMap.put(new LuceneListIndexFunction(), "*");
+    functionStringMap.put(new LuceneSearchIndexFunction(), "*");
+    functionStringMap.put(new LuceneQueryFunction(), "*");
+    functionStringMap.put(new WaitUntilFlushedFunction(), "*");
+    functionStringMap.put(new LuceneGetPageFunction(), "*");
 
     functionStringMap.keySet().forEach(FunctionService::registerFunction);
     FunctionService.registerFunction(new DumpDirectoryFiles());
@@ -90,48 +90,16 @@ public class LuceneFunctionSecurityTest {
   // getRequiredPermission are all enforced before trying to execute
   @Test
   @ConnectionConfiguration(user = "clusterManage", password = "clusterManage")
-  public void dumpDirectoryFileRequiresBoth_AsClusterManage() {
-    gfsh.executeAndAssertThat("execute function --region=testRegion --id=" + DumpDirectoryFiles.ID)
-        .tableHasRowCount(RESULT_HEADER, 1).tableHasRowWithValues(RESULT_HEADER,
-            "Exception: clusterManage not authorized for DATA:READ:testRegion")
-        .statusIsError();
-  }
-
-  @Test
-  @ConnectionConfiguration(user = "dataRead", password = "dataRead")
-  public void dumpDirectoryFileRequiresBoth_AsDataRead() {
-    gfsh.executeAndAssertThat("execute function --region=testRegion --id=" + DumpDirectoryFiles.ID)
-        .tableHasRowCount(RESULT_HEADER, 1).tableHasRowWithValues(RESULT_HEADER,
-            "Exception: dataRead not authorized for CLUSTER:MANAGE")
-        .statusIsError();
-  }
-
-  @Test
-  @ConnectionConfiguration(user = "clusterManage,dataReadRegionB",
-      password = "clusterManage,dataReadRegionB")
-  public void dumpDirectoryFileRequiresBoth_dataReadAnotherRegion() {
-    gfsh.executeAndAssertThat("execute function --region=testRegion --id=" + DumpDirectoryFiles.ID)
-        .tableHasRowCount(RESULT_HEADER, 1)
-        .tableHasRowWithValues(RESULT_HEADER,
-            "Exception: clusterManage,dataReadRegionB not authorized for DATA:READ:testRegion")
-        .statusIsError();
-  }
-
-  @Test
-  @ConnectionConfiguration(user = "clusterManage,dataReadTestRegionA",
-      password = "clusterManage,dataReadTestRegionA")
-  public void dumpDirectoryFileRequiresBoth_dataReadInsufficient() {
+  public void dumpDirectoryFileRequiresAll_insufficientUser() {
     gfsh.executeAndAssertThat("execute function --region=testRegion --id=" + DumpDirectoryFiles.ID)
         .tableHasRowCount(RESULT_HEADER, 1)
-        .tableHasRowWithValues(RESULT_HEADER,
-            "Exception: clusterManage,dataReadTestRegionA not authorized for DATA:READ:testRegion")
+        .tableHasRowWithValues(RESULT_HEADER, "Exception: clusterManage not authorized for *")
         .statusIsError();
   }
 
   @Test
-  @ConnectionConfiguration(user = "clusterManage,dataReadTestRegion",
-      password = "clusterManage,dataReadTestRegion")
-  public void dumpDirectoryFileRequiresBoth_validUser() {
+  @ConnectionConfiguration(user = "*", password = "*")
+  public void dumpDirectoryFileRequiresAll_validUser() {
     gfsh.executeAndAssertThat("execute function --region=testRegion --id=" + DumpDirectoryFiles.ID)
         .tableHasRowCount(RESULT_HEADER, 1).doesNotContainOutput("not authorized").statusIsError();
   }

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