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();