You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2016/07/22 07:48:02 UTC

kylin git commit: KYLIN-1909 wrong ACL when getting cubes

Repository: kylin
Updated Branches:
  refs/heads/v1.5.3-release-rc2 658839d63 -> ae9ccf39a


KYLIN-1909 wrong ACL when getting cubes


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

Branch: refs/heads/v1.5.3-release-rc2
Commit: ae9ccf39aa21afe7296db39505243a5843180645
Parents: 658839d
Author: shaofengshi <sh...@apache.org>
Authored: Fri Jul 22 15:47:55 2016 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Fri Jul 22 15:47:55 2016 +0800

----------------------------------------------------------------------
 .../metadata/project/learn_kylin.json            |  2 +-
 .../kylin/rest/controller/CubeController.java    | 12 ++++++++++--
 .../kylin/rest/controller/ProjectController.java |  2 +-
 .../apache/kylin/rest/service/CubeService.java   | 19 +++++++++----------
 .../kylin/rest/service/ProjectService.java       | 10 ++++++++++
 5 files changed, 31 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/ae9ccf39/examples/sample_cube/metadata/project/learn_kylin.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/project/learn_kylin.json b/examples/sample_cube/metadata/project/learn_kylin.json
index fcfd505..e468214 100644
--- a/examples/sample_cube/metadata/project/learn_kylin.json
+++ b/examples/sample_cube/metadata/project/learn_kylin.json
@@ -1,5 +1,5 @@
 {
-  "uuid": "1eaca32a-a33e-4b69-83dd-0bb8b1f8c91b",
+  "uuid": "2fbca32a-a33e-4b69-83dd-0bb8b1f8c91b",
   "name": "learn_kylin",
   "realizations": [
     {

http://git-wip-us.apache.org/repos/asf/kylin/blob/ae9ccf39/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index c049a15..7932211 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -30,6 +30,7 @@ import java.util.UUID;
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.cube.CubeInstance;
+import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.cube.model.CubeBuildTypeEnum;
 import org.apache.kylin.cube.model.CubeDesc;
@@ -172,8 +173,13 @@ public class CubeController extends BasicController {
     @RequestMapping(value = "/{cubeName}/cost", method = { RequestMethod.PUT })
     @ResponseBody
     public CubeInstance updateCubeCost(@PathVariable String cubeName, @RequestParam(value = "cost") int cost) {
+        CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
+        if (cube == null) {
+            throw new InternalErrorException("Cannot find cube " + cubeName);
+        }
+
         try {
-            return cubeService.updateCubeCost(cubeName, cost);
+            return cubeService.updateCubeCost(cube, cost);
         } catch (Exception e) {
             String message = "Failed to update cube cost: " + cubeName + " : " + cost;
             logger.error(message, e);
@@ -203,7 +209,9 @@ public class CubeController extends BasicController {
     @ResponseBody
     public CubeInstance rebuildLookupSnapshot(@PathVariable String cubeName, @PathVariable String segmentName, @RequestParam(value = "lookupTable") String lookupTable) {
         try {
-            return cubeService.rebuildLookupSnapshot(cubeName, segmentName, lookupTable);
+            final CubeManager cubeMgr = cubeService.getCubeManager();
+            final CubeInstance cube = cubeMgr.getCube(cubeName);
+            return cubeService.rebuildLookupSnapshot(cube, segmentName, lookupTable);
         } catch (IOException e) {
             logger.error(e.getLocalizedMessage(), e);
             throw new InternalErrorException(e.getLocalizedMessage());

http://git-wip-us.apache.org/repos/asf/kylin/blob/ae9ccf39/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
index f829fff..496e44a 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
@@ -76,7 +76,7 @@ public class ProjectController extends BasicController {
     @RequestMapping(value = "", method = { RequestMethod.GET })
     @ResponseBody
     public List<ProjectInstance> getProjects(@RequestParam(value = "limit", required = false) Integer limit, @RequestParam(value = "offset", required = false) Integer offset) {
-        return projectService.listAllProjects(limit, offset);
+        return projectService.listProjects(limit, offset);
     }
 
     @RequestMapping(value = "/readable", method = { RequestMethod.GET })

http://git-wip-us.apache.org/repos/asf/kylin/blob/ae9ccf39/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
index 72942e8..cfb4cf8 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
@@ -128,6 +128,7 @@ public class CubeService extends BasicService {
         return filterCubes;
     }
 
+    @PostFilter(Constant.ACCESS_POST_FILTER_READ)
     public List<CubeInstance> getCubes(final String cubeName, final String projectName, final String modelName, final Integer limit, final Integer offset) {
 
         List<CubeInstance> cubes;
@@ -147,12 +148,9 @@ public class CubeService extends BasicService {
         return cubes.subList(coffset, coffset + climit);
     }
 
-    @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN)
-    public CubeInstance updateCubeCost(String cubeName, int cost) throws IOException {
-        CubeInstance cube = getCubeManager().getCube(cubeName);
-        if (cube == null) {
-            throw new IOException("Cannot find cube " + cubeName);
-        }
+    @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#cube, 'ADMINISTRATION') or hasPermission(#cube, 'MANAGEMENT')")
+    public CubeInstance updateCubeCost(CubeInstance cube, int cost) throws IOException {
+
         if (cube.getCost() == cost) {
             // Do nothing
             return cube;
@@ -167,6 +165,7 @@ public class CubeService extends BasicService {
         return getCubeManager().updateCube(cubeBuilder);
     }
 
+    @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or " + Constant.ACCESS_HAS_ROLE_MODELER)
     public CubeInstance createCubeAndDesc(String cubeName, String projectName, CubeDesc desc) throws IOException {
         if (getCubeManager().getCube(cubeName) != null) {
             throw new InternalErrorException("The cube named " + cubeName + " already exists");
@@ -485,6 +484,7 @@ public class CubeService extends BasicService {
      *
      * @param tableName
      */
+    @PreAuthorize(Constant.ACCESS_HAS_ROLE_MODELER + " or " + Constant.ACCESS_HAS_ROLE_ADMIN)
     public void calculateCardinality(String tableName, String submitter) {
         String[] dbTableName = HadoopUtil.parseHiveTableName(tableName);
         tableName = dbTableName[0] + "." + dbTableName[1];
@@ -526,11 +526,10 @@ public class CubeService extends BasicService {
         getCubeDescManager().updateCubeDesc(desc);
     }
 
-    public CubeInstance rebuildLookupSnapshot(String cubeName, String segmentName, String lookupTable) throws IOException {
-        CubeManager cubeMgr = getCubeManager();
-        CubeInstance cube = cubeMgr.getCube(cubeName);
+    @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#cube, 'ADMINISTRATION') or hasPermission(#cube, 'OPERATION')  or hasPermission(#cube, 'MANAGEMENT')")
+    public CubeInstance rebuildLookupSnapshot(CubeInstance cube, String segmentName, String lookupTable) throws IOException {
         CubeSegment seg = cube.getSegment(segmentName, SegmentStatusEnum.READY);
-        cubeMgr.buildSnapshotTable(seg, lookupTable);
+        getCubeManager().buildSnapshotTable(seg, lookupTable);
 
         return cube;
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/ae9ccf39/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java b/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
index c0610a2..b4cceb2 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/ProjectService.java
@@ -32,6 +32,7 @@ import org.apache.kylin.rest.security.AclPermission;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PostFilter;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Component;
@@ -48,6 +49,7 @@ public class ProjectService extends BasicService {
     @Autowired
     private AccessService accessService;
 
+    @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN)
     public ProjectInstance createProject(CreateProjectRequest projectRequest) throws IOException {
         String projectName = projectRequest.getName();
         String description = projectRequest.getDescription();
@@ -81,6 +83,14 @@ public class ProjectService extends BasicService {
         return updatedProject;
     }
 
+
+    @PostFilter(Constant.ACCESS_POST_FILTER_READ)
+    public List<ProjectInstance> listProjects(final Integer limit, final Integer offset) {
+        List<ProjectInstance> projects = listAllProjects(limit, offset);
+        return projects;
+    }
+
+    @Deprecated
     public List<ProjectInstance> listAllProjects(final Integer limit, final Integer offset) {
         List<ProjectInstance> projects = getProjectManager().listAllProjects();