You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2015/05/15 07:21:52 UTC
[23/52] [abbrv] incubator-kylin git commit: add DataModelDesc ACL &
fix KYLIN-645
add DataModelDesc ACL & fix KYLIN-645
Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/4c456a21
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/4c456a21
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/4c456a21
Branch: refs/heads/0.8.0
Commit: 4c456a21e144d80b32acf291e000a80d13421135
Parents: a2f4d32
Author: jiazhong <ji...@ebay.com>
Authored: Wed Mar 18 14:47:48 2015 +0800
Committer: honma <ho...@ebay.com>
Committed: Fri May 15 11:36:27 2015 +0800
----------------------------------------------------------------------
.../java/org/apache/kylin/metadata/MetadataManager.java | 4 ++--
.../apache/kylin/rest/controller/ProjectController.java | 7 +++++--
.../org/apache/kylin/rest/security/AclEntityFactory.java | 8 ++++++++
.../java/org/apache/kylin/rest/service/ModelService.java | 7 +++++--
.../org/apache/kylin/rest/service/ProjectService.java | 10 ++++------
.../org/apache/kylin/rest/service/CacheServiceTest.java | 2 +-
webapp/app/js/model/cubeListModel.js | 7 +++++--
webapp/app/js/model/modelList.js | 10 +++++-----
webapp/app/js/services/models.js | 2 +-
webapp/app/partials/models/models.html | 4 ++--
10 files changed, 38 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
----------------------------------------------------------------------
diff --git a/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java b/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
index ea03933..86d33f7 100644
--- a/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
+++ b/metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
@@ -284,13 +284,13 @@ public class MetadataManager {
}
public List<DataModelDesc> getModels() {
- return new ArrayList<>(dataModelDescMap.values());
+ return new ArrayList<DataModelDesc>(dataModelDescMap.values());
}
public List<DataModelDesc> getModels(String projectName){
ProjectInstance projectInstance = ProjectManager.getInstance(config).getProject(projectName);
HashSet<DataModelDesc> ret = new HashSet<>();
- if (projectInstance != null) {
+ if (projectInstance != null&&projectInstance.getModels()!=null) {
for (String modelName : projectInstance.getModels()) {
DataModelDesc model = getDataModelDesc(modelName);
if (null != model) {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/server/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/kylin/rest/controller/ProjectController.java b/server/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
index 3a87858..bb984af 100644
--- a/server/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
+++ b/server/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
@@ -92,7 +92,8 @@ public class ProjectController extends BasicController {
ProjectInstance updatedProj = null;
try {
- updatedProj = projectService.updateProject(projectRequest);
+ ProjectInstance currentProject = projectService.getProjectManager().getProject(projectRequest.getFormerProjectName());
+ updatedProj = projectService.updateProject(projectRequest,currentProject);
} catch (Exception e) {
logger.error("Failed to deal with the request.", e);
throw new InternalErrorException(e.getLocalizedMessage());
@@ -106,7 +107,9 @@ public class ProjectController extends BasicController {
@Metered(name = "deleteProject")
public void deleteProject(@PathVariable String projectName) {
try {
- projectService.deleteProject(projectName);
+
+ ProjectInstance project = projectService.getProjectManager().getProject(projectName);
+ projectService.deleteProject(projectName,project);
} catch (Exception e) {
logger.error(e.getLocalizedMessage(), e);
throw new InternalErrorException("Failed to delete project. " + " Caused by: " + e.getMessage(), e);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/server/src/main/java/org/apache/kylin/rest/security/AclEntityFactory.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/kylin/rest/security/AclEntityFactory.java b/server/src/main/java/org/apache/kylin/rest/security/AclEntityFactory.java
index 0730a55..621fbe4 100644
--- a/server/src/main/java/org/apache/kylin/rest/security/AclEntityFactory.java
+++ b/server/src/main/java/org/apache/kylin/rest/security/AclEntityFactory.java
@@ -21,6 +21,7 @@ package org.apache.kylin.rest.security;
import org.apache.kylin.common.persistence.RootPersistentEntity;
import org.apache.kylin.cube.CubeInstance;
import org.apache.kylin.job.JobInstance;
+import org.apache.kylin.metadata.model.DataModelDesc;
import org.apache.kylin.metadata.project.ProjectInstance;
/**
@@ -37,6 +38,13 @@ public class AclEntityFactory {
return cubeInstance;
}
+ if ("DataModelDesc".equals(entityType)) {
+ DataModelDesc modelInstance = new DataModelDesc();
+ modelInstance.setUuid(uuid);
+
+ return modelInstance;
+ }
+
if ("JobInstance".equals(entityType)) {
JobInstance jobInstance = new JobInstance();
jobInstance.setUuid(uuid);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/server/src/main/java/org/apache/kylin/rest/service/ModelService.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/kylin/rest/service/ModelService.java b/server/src/main/java/org/apache/kylin/rest/service/ModelService.java
index e423c37..181ccdf 100644
--- a/server/src/main/java/org/apache/kylin/rest/service/ModelService.java
+++ b/server/src/main/java/org/apache/kylin/rest/service/ModelService.java
@@ -23,6 +23,7 @@ import org.apache.kylin.metadata.model.DataModelDesc;
import org.apache.kylin.metadata.project.ProjectInstance;
import org.apache.kylin.rest.constant.Constant;
import org.apache.kylin.rest.exception.InternalErrorException;
+import org.apache.kylin.rest.security.AclPermission;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -97,13 +98,15 @@ public class ModelService extends BasicService {
DataModelDesc createdDesc = null;
String owner = SecurityContextHolder.getContext().getAuthentication().getName();
createdDesc = getMetadataManager().createDataModelDesc(desc,projectName,owner);
+
+ accessService.init(createdDesc, AclPermission.ADMINISTRATION);
ProjectInstance project = getProjectManager().getProject(projectName);
- accessService.inherit(desc, project);
+ accessService.inherit(createdDesc, project);
return createdDesc;
}
- @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#model, 'ADMINISTRATION') or hasPermission(#model, 'MANAGEMENT')")
+ @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#desc, 'ADMINISTRATION') or hasPermission(#desc, 'MANAGEMENT')")
public DataModelDesc updateModelAndDesc(DataModelDesc desc, String newProjectName) throws IOException {
DataModelDesc existingModel = getMetadataManager().getDataModelDesc(desc.getName());
if (existingModel == null) {
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/server/src/main/java/org/apache/kylin/rest/service/ProjectService.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/kylin/rest/service/ProjectService.java b/server/src/main/java/org/apache/kylin/rest/service/ProjectService.java
index 9b6464c..2013a9f 100644
--- a/server/src/main/java/org/apache/kylin/rest/service/ProjectService.java
+++ b/server/src/main/java/org/apache/kylin/rest/service/ProjectService.java
@@ -65,13 +65,12 @@ public class ProjectService extends BasicService {
return createdProject;
}
- @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#cube, 'ADMINISTRATION') or hasPermission(#cube, 'MANAGEMENT')")
- public ProjectInstance updateProject(UpdateProjectRequest projectRequest) throws IOException {
+ @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#currentProject, 'ADMINISTRATION') or hasPermission(#currentProject, 'MANAGEMENT')")
+ public ProjectInstance updateProject(UpdateProjectRequest projectRequest,ProjectInstance currentProject) throws IOException {
String formerProjectName = projectRequest.getFormerProjectName();
String newProjectName = projectRequest.getNewProjectName();
String newDescription = projectRequest.getNewDescription();
- ProjectInstance currentProject = getProjectManager().getProject(formerProjectName);
if (currentProject == null) {
throw new InternalErrorException("The project named " + formerProjectName + " does not exists");
@@ -101,9 +100,8 @@ public class ProjectService extends BasicService {
return projects.subList(coffset, coffset + climit);
}
- @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#cube, 'ADMINISTRATION') or hasPermission(#cube, 'MANAGEMENT')")
- public void deleteProject(String projectName) throws IOException {
- ProjectInstance project = getProjectManager().getProject(projectName);
+ @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#project, 'ADMINISTRATION') or hasPermission(#cube, 'MANAGEMENT')")
+ public void deleteProject(String projectName,ProjectInstance project) throws IOException {
getProjectManager().dropProject(projectName);
accessService.clean(project, true);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
----------------------------------------------------------------------
diff --git a/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
index 64a71c4..6407b06 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/CacheServiceTest.java
@@ -303,7 +303,7 @@ public class CacheServiceTest extends LocalFileMetadataTestCase {
assertTrue(metadataManagerB.getDataModelDesc(dataModelName) == null);
dataModelDesc.setName(dataModelName);
- metadataManager.createDataModelDesc(dataModelDesc);
+ metadataManager.createDataModelDesc(dataModelDesc,"default","ADMIN");
//only one for data model update
assertEquals(1, broadcaster.getCounterAndClear());
waitForCounterAndClear(1);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/webapp/app/js/model/cubeListModel.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/model/cubeListModel.js b/webapp/app/js/model/cubeListModel.js
index 3cd1b2b..3e3834f 100755
--- a/webapp/app/js/model/cubeListModel.js
+++ b/webapp/app/js/model/cubeListModel.js
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-KylinApp.service('CubeList',function(CubeService,$q){
+KylinApp.service('CubeList',function(CubeService,$q,AccessService){
var cubes=[];
var _this = this;
@@ -25,8 +25,11 @@ KylinApp.service('CubeList',function(CubeService,$q){
var defer = $q.defer();
CubeService.list(queryParam, function (_cubes) {
angular.forEach(_cubes, function (cube, index) {
+ AccessService.list({type: "CubeInstance", uuid: cube.uuid}, function (accessEntities) {
+ cube.accessEntities = accessEntities;
+ });
+
if(cube.name){
-// $scope.listAccess(cube, 'CubeInstance');
if (cube.segments && cube.segments.length > 0) {
for(var i= cube.segments.length-1;i>=0;i--){
if(cube.segments[i].status==="READY"){
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/webapp/app/js/model/modelList.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/model/modelList.js b/webapp/app/js/model/modelList.js
index 30e9b70..9e92ed9 100644
--- a/webapp/app/js/model/modelList.js
+++ b/webapp/app/js/model/modelList.js
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-KylinApp.service('ModelList',function(ModelService,$q){
+KylinApp.service('ModelList',function(ModelService,$q,AccessService){
var models=[];
var _this = this;
@@ -24,10 +24,10 @@ KylinApp.service('ModelList',function(ModelService,$q){
var defer = $q.defer();
ModelService.list(queryParam, function (_models) {
- angular.forEach(_models, function (models, index) {
- if(models.name){
-// $scope.listAccess(models, 'modelsInstance');
- }
+ angular.forEach(_models, function (model, index) {
+ AccessService.list({type: "DataModelDesc", uuid: model.uuid}, function (accessEntities) {
+ model.accessEntities = accessEntities;
+ });
});
_models = _.filter(_models,function(models){return models.name!=undefined});
_this.models = _this.models.concat(_models);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/webapp/app/js/services/models.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/services/models.js b/webapp/app/js/services/models.js
index 7698e49..fff4c4f 100644
--- a/webapp/app/js/services/models.js
+++ b/webapp/app/js/services/models.js
@@ -21,6 +21,6 @@ KylinApp.factory('ModelService', ['$resource', function ($resource, config) {
list: {method: 'GET', params: {}, isArray: true},
drop: {method: 'DELETE', params: {}, isArray: false},
save: {method: 'POST', params: {}, isArray: false},
- update: {method: 'PUT', params: {}, isArray: false},
+ update: {method: 'PUT', params: {}, isArray: false}
});
}]);
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/4c456a21/webapp/app/partials/models/models.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/models/models.html b/webapp/app/partials/models/models.html
index 85f7cad..ac433c1 100644
--- a/webapp/app/partials/models/models.html
+++ b/webapp/app/partials/models/models.html
@@ -85,12 +85,12 @@
<td>
<div ng-click="$event.stopPropagation();" class="btn-group" ng-if="userService.hasRole('ROLE_ADMIN') || hasPermission(model, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask, permissions.OPERATION.mask)">
<button type="button" class="btn btn-default btn-xs dropdown-toggle"
- data-toggle="dropdown" ng-click="listAccess(model, 'ModelInstance')">
+ data-toggle="dropdown">
Action <span class="ace-icon fa fa-caret-down icon-on-right"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="models/edit/{{model.name}}">Edit</a></li>
- <li ng-if="userService.hasRole('ROLE_ADMIN')">
+ <li ng-show="false" ng-if="userService.hasRole('ROLE_ADMIN')">
<a ng-click="dropModel(model)" tooltip="Drop the model, related cubes and data permanently.">Drop</a></li>
</ul>