You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by kb...@apache.org on 2017/01/23 09:49:17 UTC

incubator-atlas git commit: ATLAS-1489 : Show create/edit entity button based on role (Kalyanikashikar via kevalbhatt)

Repository: incubator-atlas
Updated Branches:
  refs/heads/master 7f914ab9e -> c8f3184fc


ATLAS-1489 : Show create/edit entity button based on role (Kalyanikashikar via kevalbhatt)


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

Branch: refs/heads/master
Commit: c8f3184fccd5236e9f2b5366c301fd3b286f6ef2
Parents: 7f914ab
Author: kevalbhatt <kb...@apache.org>
Authored: Mon Jan 23 15:15:53 2017 +0530
Committer: kevalbhatt <kb...@apache.org>
Committed: Mon Jan 23 15:18:39 2017 +0530

----------------------------------------------------------------------
 .../simple/AtlasAuthorizationUtils.java         | 25 +++++++++++++++++++-
 dashboardv2/public/js/main.js                   |  6 +++++
 .../detail_page/DetailPageLayoutView_tmpl.html  |  3 ++-
 .../templates/search/SearchLayoutView_tmpl.html |  8 ++++---
 .../views/detail_page/DetailPageLayoutView.js   |  7 +++---
 .../public/js/views/search/SearchLayoutView.js  | 12 ++++++++--
 .../js/views/search/SearchResultLayoutView.js   |  2 +-
 release-log.txt                                 |  1 +
 .../atlas/web/resources/AdminResource.java      | 16 +++++++++++--
 9 files changed, 66 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/authorization/src/main/java/org/apache/atlas/authorize/simple/AtlasAuthorizationUtils.java
----------------------------------------------------------------------
diff --git a/authorization/src/main/java/org/apache/atlas/authorize/simple/AtlasAuthorizationUtils.java b/authorization/src/main/java/org/apache/atlas/authorize/simple/AtlasAuthorizationUtils.java
index 9f33115..f30dfe0 100644
--- a/authorization/src/main/java/org/apache/atlas/authorize/simple/AtlasAuthorizationUtils.java
+++ b/authorization/src/main/java/org/apache/atlas/authorize/simple/AtlasAuthorizationUtils.java
@@ -21,6 +21,10 @@ package org.apache.atlas.authorize.simple;
 import org.apache.atlas.AtlasClient;
 import org.apache.atlas.authorize.AtlasActionTypes;
 import org.apache.atlas.authorize.AtlasResourceTypes;
+import org.apache.atlas.authorize.AtlasAuthorizationException;
+import org.apache.atlas.authorize.AtlasAuthorizer;
+import org.apache.atlas.authorize.AtlasAccessRequest;
+import org.apache.atlas.authorize.AtlasAuthorizerFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -115,7 +119,7 @@ public class AtlasAuthorizationUtils {
                 || api.startsWith("graph")) {
             resourceTypes.add(AtlasResourceTypes.OPERATION);
         } else if (api.startsWith("entities") || api.startsWith("lineage") ||
-                api.startsWith("discovery") || api.startsWith("entity")) {
+                api.startsWith("discovery") || api.startsWith("entity")  || api.startsWith("search")) {
             resourceTypes.add(AtlasResourceTypes.ENTITY);
         } else if (api.startsWith("taxonomies")) {
             resourceTypes.add(AtlasResourceTypes.TAXONOMY);
@@ -135,4 +139,23 @@ public class AtlasAuthorizationUtils {
         }
         return resourceTypes;
     }
+
+    public static boolean isAccessAllowed(AtlasResourceTypes resourcetype, AtlasActionTypes actionType, String userName, Set<String> groups) {
+        AtlasAuthorizer authorizer = null;
+        boolean isaccessAllowed = false;
+
+        Set<AtlasResourceTypes> resourceTypes = new HashSet<>();
+        resourceTypes.add(resourcetype);
+        AtlasAccessRequest atlasRequest = new AtlasAccessRequest(resourceTypes, "*", actionType, userName, groups);
+        try {
+            authorizer = AtlasAuthorizerFactory.getAtlasAuthorizer();
+            if (authorizer != null) {
+                isaccessAllowed = authorizer.isAccessAllowed(atlasRequest);
+            }
+        } catch (AtlasAuthorizationException e) {
+            LOG.error("Unable to obtain AtlasAuthorizer. ", e);
+        }
+
+        return isaccessAllowed;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/dashboardv2/public/js/main.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index fe08754..3b7f2b2 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -174,6 +174,12 @@ require(['App',
             if (response && response['atlas.feature.taxonomy.enable'] !== undefined) {
                 Globals.taxonomy = response['atlas.feature.taxonomy.enable']
             }
+            if (response && response['atlas.entity.create.allowed'] !== undefined) {
+                Globals.entityCreate = response['atlas.entity.create.allowed'];
+            }
+            if (response && response['atlas.entity.update.allowed'] !== undefined) {
+                Globals.entityUpdate = response['atlas.entity.update.allowed'];
+            }
             App.start();
         }
     });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html b/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
index e47b0c2..1de3608 100644
--- a/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
@@ -22,8 +22,9 @@
         <div class="row">
             <a href="javascript:void(0);" class="backButton" data-id="backButton"><i class="fa fa-chevron-left"></i>  Back To Results</a>
         </div>
-        <h1><span  data-id="title"></span></h1>
+        <h1><span  data-id="title"></span></h1> {{#if entityUpdate}}
         <button data-id="editButton" class="btn btn-default pull-right editbutton" id="editText"><i class="fa fa-pencil"></i></button>
+        {{/if}}
         <div class="tagTerm">
             <span class="tagSpan">Tags:</span>
             <div class="" data-id="tagList">

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html b/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
index 8d7f874..7301ebc 100644
--- a/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
@@ -15,17 +15,19 @@
  * limitations under the License.
 -->
 <div class="row row-margin-bottom">
+    {{#if entityCreate}}
     <div class="col-sm-12">
         <button class="btn btn-atlasAction btn-atlas pull-left" data-id="createEntity"><i class="fa fa-plus"></i> Create Entity</button>
     </div>
+    {{/if}}
     <div class="col-sm-12" style="margin:15px 0px;">
         <div class="row">
             <div class="col-md-6">
                 <span class="pull-left">Text</span>
                 <label class="switch pull-left">
-                   <input type="checkbox" class="switch-input" name="queryType" value="text"/>
-                   <span class="switch-slider"></span>
-                 </label>
+                    <input type="checkbox" class="switch-input" name="queryType" value="text" />
+                    <span class="switch-slider"></span>
+                </label>
                 <span class="pull-left">DSL</span>
             </div>
             <div class="col-md-6">

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index d63bb5a..3f197cf 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -61,15 +61,14 @@ define(['require',
             },
             templateHelpers: function() {
                 return {
-                    taxonomy: Globals.taxonomy
+                    taxonomy: Globals.taxonomy,
+                    entityUpdate: Globals.entityUpdate
                 };
             },
             /** ui events hash */
             events: function() {
                 var events = {};
-                if (Globals.entityCrud) {
-                    events["click " + this.ui.editButton] = 'onClickEditEntity';
-                }
+                events["click " + this.ui.editButton] = 'onClickEditEntity';
                 events["click " + this.ui.tagClick] = function(e) {
                     if (e.target.nodeName.toLocaleLowerCase() != "i") {
                         var scope = $(e.currentTarget);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/dashboardv2/public/js/views/search/SearchLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
index 38bf6b5..bdb71a6 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -21,8 +21,9 @@ define(['require',
     'hbs!tmpl/search/SearchLayoutView_tmpl',
     'collection/VTagList',
     'utils/Utils',
-    'utils/UrlLinks'
-], function(require, Backbone, SearchLayoutViewTmpl, VTagList, Utils, UrlLinks) {
+    'utils/UrlLinks',
+    'utils/Globals',
+], function(require, Backbone, SearchLayoutViewTmpl, VTagList, Utils, UrlLinks, Globals) {
     'use strict';
 
     var SearchLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -45,6 +46,13 @@ define(['require',
                 refreshBtn: '[data-id="refreshBtn"]',
                 createEntity: "[data-id='createEntity']",
             },
+
+            templateHelpers: function() {
+                return {
+                    entityCreate: Globals.entityCreate
+                };
+            },
+
             /** ui events hash */
             events: function() {
                 var events = {},

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/dashboardv2/public/js/views/search/SearchResultLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index f389515..8d0720e 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -449,7 +449,7 @@ define(['require',
                                     nameHtml += '<button type="button" title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i></button>';
                                     return '<div class="readOnly readOnlyLink">' + nameHtml + '</div>';
                                 } else {
-                                    if (Globals.entityCrud) {
+                                    if (Globals.entityUpdate) {
                                         nameHtml += '<button title="Edit" data-id="editEntityButton"  data-giud= "' + (model.get('$id$').id || model.get('$id$')) + '" class="btn btn-atlasAction btn-atlas editBtn"><i class="fa fa-pencil"></i></button>'
                                     }
                                     return nameHtml;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 760f4c3..a770877 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,6 +9,7 @@ ATLAS-1060 Add composite indexes for exact match performance improvements for al
 ATLAS-1127 Modify creation and modification timestamps to Date instead of Long(sumasai)
 
 ALL CHANGES:
+ATLAS-1489 Show create/edit entity button based on role (Kalyanikashikar via kevalbhatt)
 ATLAS-1478 REST API to add classification to multiple entities (svimal2106 via mneethiraj)
 ATLAS-1490 added methods to get sub-types of entity and classification types (mneethiraj)
 ATLAS-1437 UI update to disallow tag association changes to deleted entities (Kalyanikashikar via mneethiraj)

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c8f3184f/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
----------------------------------------------------------------------
diff --git a/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java b/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
index 02d7488..3b4155c 100755
--- a/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
+++ b/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
@@ -20,6 +20,9 @@ package org.apache.atlas.web.resources;
 
 import com.google.inject.Inject;
 import org.apache.atlas.AtlasClient;
+import org.apache.atlas.authorize.AtlasActionTypes;
+import org.apache.atlas.authorize.AtlasResourceTypes;
+import org.apache.atlas.authorize.simple.AtlasAuthorizationUtils;
 import org.apache.atlas.web.filters.AtlasCSRFPreventionFilter;
 import org.apache.atlas.web.service.ServiceState;
 import org.apache.atlas.web.util.Servlets;
@@ -58,7 +61,8 @@ public class AdminResource {
     private static final String CUSTOM_METHODS_TO_IGNORE_PARAM = "atlas.rest-csrf.methods-to-ignore";
     private static final String CUSTOM_HEADER_PARAM = "atlas.rest-csrf.custom-header";
     private static final String isTaxonomyEnabled = "atlas.feature.taxonomy.enable";
-    
+    private static final String isEntityUpdateAllowed = "atlas.entity.update.allowed";
+    private static final String isEntityCreateAllowed = "atlas.entity.create.allowed";
     private Response version;
     private ServiceState serviceState;
 
@@ -179,6 +183,8 @@ public class AdminResource {
         try {
             PropertiesConfiguration configProperties = new PropertiesConfiguration("atlas-application.properties");
             Boolean enableTaxonomy = configProperties.getBoolean(isTaxonomyEnabled, false);
+            boolean isEntityUpdateAccessAllowed = false;
+            boolean isEntityCreateAccessAllowed = false;
             Authentication auth = SecurityContextHolder.getContext().getAuthentication();
             String userName = null;
             Set<String> groups = new HashSet<>();
@@ -188,15 +194,21 @@ public class AdminResource {
                 for (GrantedAuthority c : authorities) {
                     groups.add(c.getAuthority());
                 }
+                isEntityUpdateAccessAllowed = AtlasAuthorizationUtils.isAccessAllowed(AtlasResourceTypes.ENTITY,
+                        AtlasActionTypes.UPDATE, userName, groups);
+                isEntityCreateAccessAllowed = AtlasAuthorizationUtils.isAccessAllowed(AtlasResourceTypes.ENTITY,
+                        AtlasActionTypes.CREATE, userName, groups);
             }
 
             JSONObject responseData = new JSONObject();
 
-            responseData.put(isCSRF_ENABLED,  AtlasCSRFPreventionFilter.isCSRF_ENABLED);
+            responseData.put(isCSRF_ENABLED, AtlasCSRFPreventionFilter.isCSRF_ENABLED);
             responseData.put(BROWSER_USER_AGENT_PARAM, AtlasCSRFPreventionFilter.BROWSER_USER_AGENTS_DEFAULT);
             responseData.put(CUSTOM_METHODS_TO_IGNORE_PARAM, AtlasCSRFPreventionFilter.METHODS_TO_IGNORE_DEFAULT);
             responseData.put(CUSTOM_HEADER_PARAM, AtlasCSRFPreventionFilter.HEADER_DEFAULT);
             responseData.put(isTaxonomyEnabled, enableTaxonomy);
+            responseData.put(isEntityUpdateAllowed, isEntityUpdateAccessAllowed);
+            responseData.put(isEntityCreateAllowed, isEntityCreateAccessAllowed);
             responseData.put("userName", userName);
             responseData.put("groups", groups);