Repository: kylin
Updated Branches:
  refs/heads/2.x-staging cd5e21b4c -> bda79cac4


KYLIN-1341, display model json and update project permission


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

Branch: refs/heads/2.x-staging
Commit: bda79cac47b944e8ea0caaf83c4038dac5d4a60a
Parents: 85319c0
Author: janzhongi <jiazh...@ebay.com>
Authored: Wed Jan 27 19:33:42 2016 +0800
Committer: janzhongi <jiazh...@ebay.com>
Committed: Wed Jan 27 19:33:57 2016 +0800

----------------------------------------------------------------------
 .../rest/controller/ProjectController.java      | 83 ++++++++++----------
 webapp/app/js/controllers/cubeModel.js          |  7 +-
 webapp/app/partials/cubes/cube_detail.html      |  6 --
 webapp/app/partials/jobs/jobs.html              |  6 +-
 webapp/app/partials/models/model_detail.html    | 13 ++-
 webapp/app/partials/models/models.html          |  4 +-
 webapp/app/partials/models/models_tree.html     |  2 +-
 webapp/app/partials/query/query.html            |  4 +-
 8 files changed, 61 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/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 5e65b3b..980ec8c 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
@@ -66,13 +66,14 @@ public class ProjectController extends BasicController {
     private AccessService accessService;
     @Autowired
     private CubeService cubeService;
+
     /**
      * Get available project list
-     * 
+     *
      * @return Table metadata array
      * @throws IOException
      */
-    @RequestMapping(value = "", method = { RequestMethod.GET })
+    @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);
@@ -110,71 +111,72 @@ public class ProjectController extends BasicController {
         }
         String userName = userDetails.getUsername();
         for (ProjectInstance projectInstance : projectInstances) {
+            if (projectInstance == null) {
+                continue;
+            }
 
             boolean hasProjectPermission = false;
             AclEntity ae = accessService.getAclEntity("ProjectInstance", 
projectInstance.getId());
             Acl projectAcl = accessService.getAcl(ae);
             //project no Acl info will be skipped
-            if(projectAcl == null){
-                continue;
-            }
+            if (projectAcl != null) {
 
-            //project owner has permission
-            if 
(((PrincipalSid)projectAcl.getOwner()).getPrincipal().equals(userName)) {
-                readableProjects.add(projectInstance);
-                continue;
-            }
-
-            //check project permission and role
-            for (AccessControlEntry ace : projectAcl.getEntries()) {
-                if( ace.getSid() instanceof PrincipalSid && 
((PrincipalSid)ace.getSid()).getPrincipal().equals(userName)) {
-                    hasProjectPermission = true;
+                //project owner has permission
+                if (((PrincipalSid) 
projectAcl.getOwner()).getPrincipal().equals(userName)) {
                     readableProjects.add(projectInstance);
-                    break;
+                    continue;
+                }
 
-                }else if(ace.getSid() instanceof GrantedAuthoritySid){
-                    String projectAuthority = ((GrantedAuthoritySid) 
ace.getSid()).getGrantedAuthority();
-                    if(userAuthority.contains(projectAuthority)){
+                //check project permission and role
+                for (AccessControlEntry ace : projectAcl.getEntries()) {
+                    if (ace.getSid() instanceof PrincipalSid && 
((PrincipalSid) ace.getSid()).getPrincipal().equals(userName)) {
                         hasProjectPermission = true;
                         readableProjects.add(projectInstance);
                         break;
+
+                    } else if (ace.getSid() instanceof GrantedAuthoritySid) {
+                        String projectAuthority = ((GrantedAuthoritySid) 
ace.getSid()).getGrantedAuthority();
+                        if (userAuthority.contains(projectAuthority)) {
+                            hasProjectPermission = true;
+                            readableProjects.add(projectInstance);
+                            break;
+                        }
+
                     }
 
                 }
-
             }
+
             if (!hasProjectPermission) {
                 List<CubeInstance> cubeInstances = 
cubeService.listAllCubes(projectInstance.getName());
 
                 for (CubeInstance cubeInstance : cubeInstances) {
-                    if(cubeInstance == null){
+                    if (cubeInstance == null) {
                         continue;
                     }
                     boolean hasCubePermission = false;
                     AclEntity cubeAe = 
accessService.getAclEntity("CubeInstance", cubeInstance.getId());
                     Acl cubeAcl = accessService.getAcl(cubeAe);
                     //cube no Acl info will not be used to filter project
-                    if(cubeAcl == null){
-                        continue;
-                    }
-                    //cube owner will have permission to read project
-                    if 
(((PrincipalSid)cubeAcl.getOwner()).getPrincipal().equals(userName)) {
-                        hasProjectPermission = true;
-                        break;
-                    }
-                    for (AccessControlEntry cubeAce : cubeAcl.getEntries()) {
-
-                        if (cubeAce.getSid() instanceof PrincipalSid && 
((PrincipalSid)cubeAce.getSid()).getPrincipal().equals(userName)) {
-                            hasCubePermission = true;
+                    if (cubeAcl != null) {
+                        //cube owner will have permission to read project
+                        if (((PrincipalSid) 
cubeAcl.getOwner()).getPrincipal().equals(userName)) {
+                            hasProjectPermission = true;
                             break;
                         }
-                        else if(cubeAce.getSid() instanceof 
GrantedAuthoritySid) {
-                            String cubeAuthority = ((GrantedAuthoritySid) 
cubeAce.getSid()).getGrantedAuthority();
-                            if(userAuthority.contains(cubeAuthority)){
+                        for (AccessControlEntry cubeAce : 
cubeAcl.getEntries()) {
+
+                            if (cubeAce.getSid() instanceof PrincipalSid && 
((PrincipalSid) cubeAce.getSid()).getPrincipal().equals(userName)) {
                                 hasCubePermission = true;
                                 break;
-                            }
+                            } else if (cubeAce.getSid() instanceof 
GrantedAuthoritySid) {
+                                String cubeAuthority = ((GrantedAuthoritySid) 
cubeAce.getSid()).getGrantedAuthority();
+                                if (userAuthority.contains(cubeAuthority)) {
+                                    hasCubePermission = true;
+                                    break;
+                                }
 
+                            }
                         }
                     }
                     if (hasCubePermission) {
@@ -192,7 +194,7 @@ public class ProjectController extends BasicController {
         return readableProjects;
     }
 
-    @RequestMapping(value = "", method = { RequestMethod.POST })
+    @RequestMapping(value = "", method = {RequestMethod.POST})
     @ResponseBody
     public ProjectInstance saveProject(@RequestBody CreateProjectRequest 
projectRequest) {
         if (StringUtils.isEmpty(projectRequest.getName())) {
@@ -210,7 +212,7 @@ public class ProjectController extends BasicController {
         return createdProj;
     }
 
-    @RequestMapping(value = "", method = { RequestMethod.PUT })
+    @RequestMapping(value = "", method = {RequestMethod.PUT})
     @ResponseBody
     public ProjectInstance updateProject(@RequestBody UpdateProjectRequest 
projectRequest) {
         if (StringUtils.isEmpty(projectRequest.getFormerProjectName())) {
@@ -229,7 +231,7 @@ public class ProjectController extends BasicController {
         return updatedProj;
     }
 
-    @RequestMapping(value = "/{projectName}", method = { RequestMethod.DELETE 
})
+    @RequestMapping(value = "/{projectName}", method = {RequestMethod.DELETE})
     @ResponseBody
     public void deleteProject(@PathVariable String projectName) {
         try {
@@ -245,6 +247,7 @@ public class ProjectController extends BasicController {
     public void setProjectService(ProjectService projectService) {
         this.projectService = projectService;
     }
+
     public void setAccessService(AccessService accessService) {
         this.accessService = accessService;
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/js/controllers/cubeModel.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeModel.js 
b/webapp/app/js/controllers/cubeModel.js
index b2e2c64..a96edc5 100644
--- a/webapp/app/js/controllers/cubeModel.js
+++ b/webapp/app/js/controllers/cubeModel.js
@@ -29,18 +29,19 @@ KylinApp.controller('CubeModelCtrl', function 
($location,$scope, $modal,cubeConf
     };
 
     $scope.cleanStatus = function(model){
+      var _model = angular.copy(model);
 
-        if (!model)
+        if (!_model)
         {
             return;
         }
-        var newModel = jQuery.extend(true, {}, model);
+        var newModel = jQuery.extend(true, {}, _model);
         delete newModel.project;
         delete  newModel.accessEntities;
         delete  newModel.visiblePage;
         delete  newModel.cubes;
 
-        return newModel;
+        return angular.toJson(newModel,true);
     };
 
     $scope.cubeConfig = cubeConfig;

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/partials/cubes/cube_detail.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/cubes/cube_detail.html 
b/webapp/app/partials/cubes/cube_detail.html
index 49e2578..b10a08c 100755
--- a/webapp/app/partials/cubes/cube_detail.html
+++ b/webapp/app/partials/cubes/cube_detail.html
@@ -21,8 +21,6 @@
         <li class="{{(!cube.visiblePage || cube.visiblePage=='metadata')? 
'active':''}}">
             <a href="" ng-click="cube.visiblePage='metadata'">Grid</a>
         </li>
-        <!--<li class="{{cube.visiblePage=='graph'? 'active':''}}">-->
-            <!--<a href="" 
ng-click="cube.visiblePage='graph';buildGraph(cube);">Visualization</a>-->
         <!--</li>-->
         <li class="{{cube.visiblePage=='sql'? 'active':''}}">
             <a href="" 
ng-click="cube.visiblePage='sql';getCubeSql(cube)">SQL</a>
@@ -31,10 +29,6 @@
             ng-if="userService.hasRole('ROLE_ADMIN') || hasPermission(cube, 
16) && !newAccess">
             <a href="" ng-click="cube.visiblePage='json';">JSON(Cube)</a>
         </li>
-      <!--<li class="{{cube.visiblePage=='json_model'? 'active':''}}"-->
-          <!--ng-if="userService.hasRole('ROLE_ADMIN') || hasPermission(cube, 
16) && !newAccess">-->
-        <!--<a href="" 
ng-click="cube.visiblePage='json_model';">JSON(Model)</a>-->
-      <!--</li>-->
         <li class="{{cube.visiblePage=='access'? 'active':''}}">
             <a href="" ng-click="cube.visiblePage='access';listAccess(cube, 
'CubeInstance');">Access</a>
         </li>

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/partials/jobs/jobs.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/jobs/jobs.html 
b/webapp/app/partials/jobs/jobs.html
index 124a1f6..4c2ebc3 100644
--- a/webapp/app/partials/jobs/jobs.html
+++ b/webapp/app/partials/jobs/jobs.html
@@ -20,9 +20,9 @@
     <!--Project: -->
     <div class="col-xs-3">
         <form ng-if="userService.isAuthorized()">
-            <div class="form-group">
-                <a class="btn btn-xs btn-info" href="projects" tooltip="Manage 
Project"><i class="fa fa-gears"></i></a>
-                <a class="btn btn-xs btn-primary" style="width: 29px" 
ng-if="userService.hasRole('ROLE_ADMIN')||userService.hasRole('ROLE_MODELER')&&kylinConfig.getDeployEnv()!=='PROD'"
  tooltip="Add Project" ng-click="toCreateProj()">
+            <div class="form-group" 
ng-if="userService.hasRole('ROLE_MODELER')" >
+                <a class="btn btn-xs btn-info" ng-if="Manage Project" 
href="projects" tooltip="Manage Project"><i class="fa fa-gears"></i></a>
+                <a class="btn btn-xs btn-primary" style="width: 29px" 
tooltip="Add Project" ng-click="toCreateProj()">
                     <i class="fa fa-plus"></i>
                 </a>
             </div>

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/partials/models/model_detail.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/models/model_detail.html 
b/webapp/app/partials/models/model_detail.html
index df42fde..dcf782a 100644
--- a/webapp/app/partials/models/model_detail.html
+++ b/webapp/app/partials/models/model_detail.html
@@ -29,10 +29,9 @@
         <li class="{{modelsManager.selectedModel.visiblePage=='graph'? 
'active':''}}">
             <a href="" 
ng-click="modelsManager.selectedModel.visiblePage='graph';buildGraph(modelsManager.selectedModel);$event.stopPropagation();">Visualization</a>
         </li>
-        <li class="{{modelsManager.selectedModel.visiblePage=='json_model'? 
'active':''}}"
-            ng-if="userService.hasRole('ROLE_ADMIN') || 
hasPermission(modelsManager.selectedModel, 16) && !newAccess">
-            <a href="" 
ng-click="modelsManager.selectedModel.visiblePage='json_model';">JSON</a>
-        </li>
+      <li class="{{modelsManager.selectedModel.visiblePage=='json_model'? 
'active':''}}">
+        <a href="" 
ng-click="modelsManager.selectedModel.visiblePage='json_model';">JSON</a>
+      </li>
         <li class="dropdown" ng-if="userService.hasRole('ROLE_ADMIN') || 
hasPermission(modelsManager.selectedModel, permissions.ADMINISTRATION.mask, 
permissions.MANAGEMENT.mask, permissions.OPERATION.mask)">
             <a class="dropdown-toggle highlight-bule" data-toggle="dropdown" 
href="#" aria-expanded="true">
                 <i class="fa fa-star"> Action </i> <span class="caret"></span>
@@ -59,9 +58,9 @@
     </div>
     <div ng-show="modelsManager.selectedModel.visiblePage=='graph'" 
id="model_graph_{{modelsManager.selectedModel.name}}" class="model-detail 
model_graph">
     </div>
-    <div ng-show="modelsManager.selectedModel.visiblePage=='json_model'" 
class="model-detail">
-          <pre ng-if="!state.jsonEdit"
-               style="background-color: white;border: 
0px">{{angular.toJson(cleanStatus(modelsManager.selectedModel), true)}}</pre>
+    <div ng-show="modelsManager.selectedModel.visiblePage=='json_model'" 
class="cube-detail">
+            <pre
+              style="background-color: white;border: 
0px">{{cleanStatus(modelsManager.selectedModel)}}</pre>
     </div>
 </div>
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/partials/models/models.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/models/models.html 
b/webapp/app/partials/models/models.html
index 4d8c7ac..c0b7a05 100644
--- a/webapp/app/partials/models/models.html
+++ b/webapp/app/partials/models/models.html
@@ -19,9 +19,9 @@
 <div class="page-header" style="height: 50px;">
     <!--Project-->
     <form class="navbar-form navbar-left" style="margin-top: 0px !important;" 
ng-if="userService.isAuthorized()">
-        <div class="form-group">
+        <div class="form-group" ng-if="userService.hasRole('ROLE_MODELER')" >
             <a class="btn btn-xs btn-info" href="projects" tooltip="Manage 
Project"><i class="fa fa-gears"></i></a>
-            <a class="btn btn-xs btn-primary" 
ng-if="userService.hasRole('ROLE_ADMIN')||userService.hasRole('ROLE_MODELER')&&kylinConfig.getDeployEnv()!=='PROD'"
 style="width: 29px" tooltip="Add Project" ng-click="toCreateProj()">
+            <a class="btn btn-xs btn-primary" style="width: 29px" tooltip="Add 
Project" ng-click="toCreateProj()">
                 <i class="fa fa-plus"></i>
             </a>
         </div>

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/partials/models/models_tree.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/models/models_tree.html 
b/webapp/app/partials/models/models_tree.html
index 9d32c9f..e84f082 100644
--- a/webapp/app/partials/models/models_tree.html
+++ b/webapp/app/partials/models/models_tree.html
@@ -20,7 +20,7 @@
     <div class="row">
       <div class="col-xs-12" style="margin-top:10px;">
         <!--<i class="fa fa-plus fa-2x" style="color:green;"> New</i>-->
-        <a class="dropdown-toggle" data-toggle="dropdown" href="#" 
aria-expanded="true">
+        <a ng-if="userService.hasRole('ROLE_MODELER')" class="dropdown-toggle" 
data-toggle="dropdown" href="#" aria-expanded="true">
           <i class="fa fa-plus fa-2x" style="color:#2e8965;"> New<span 
class="caret"></span></i>
           <!--<i> New </i> <span class="caret"></span>-->
         </a>

http://git-wip-us.apache.org/repos/asf/kylin/blob/bda79cac/webapp/app/partials/query/query.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/query/query.html 
b/webapp/app/partials/query/query.html
index d34dbc7..7b865fc 100644
--- a/webapp/app/partials/query/query.html
+++ b/webapp/app/partials/query/query.html
@@ -19,9 +19,9 @@
 <div class="page-header" style="height: 50px;">
     <!--Project-->
     <form class="navbar-form navbar-left" style="margin-top: 0px !important;" 
ng-if="userService.isAuthorized()">
-        <div class="form-group">
+        <div class="form-group" ng-if="userService.hasRole('ROLE_MODELER')">
             <a class="btn btn-xs btn-info" href="projects" tooltip="Manage 
Project"><i class="fa fa-gears"></i></a>
-            <a class="btn btn-xs btn-primary" 
ng-if="userService.hasRole('ROLE_ADMIN')||userService.hasRole('ROLE_MODELER')&&kylinConfig.getDeployEnv()!=='PROD'"
 style="width: 29px" tooltip="Add Project" ng-click="toCreateProj()">
+            <a class="btn btn-xs btn-primary" style="width: 29px" tooltip="Add 
Project" ng-click="toCreateProj()">
                 <i class="fa fa-plus"></i>
             </a>
         </div>

Reply via email to