Pārlūkot izejas kodu

HUE-5057 [medata] Only show enrichment if the user has the permission

Romain Rigaux 9 gadi atpakaļ
vecāks
revīzija
ed6f84d

+ 4 - 4
apps/metastore/src/metastore/views.py

@@ -81,7 +81,7 @@ def databases(request):
     'partitions': [],
     'has_write_access': has_write_access(request.user),
     'is_optimizer_enabled': has_optimizer(),
-    'is_navigator_enabled': has_navigator(),
+    'is_navigator_enabled': has_navigator(request.user),
     'optimizer_url': get_optimizer_url(),
     'navigator_url': get_navigator_url(),
   })
@@ -209,7 +209,7 @@ def show_tables(request, database=None):
     'partitions': [],
     'has_write_access': has_write_access(request.user),
     'is_optimizer_enabled': has_optimizer(),
-    'is_navigator_enabled': has_navigator(),
+    'is_navigator_enabled': has_navigator(request.user),
     'optimizer_url': get_optimizer_url(),
     'navigator_url': get_navigator_url(),
     })
@@ -284,7 +284,7 @@ def describe_table(request, database, table):
       'database': database,
       'has_write_access': has_write_access(request.user),
       'is_optimizer_enabled': has_optimizer(),
-      'is_navigator_enabled': has_navigator(),
+      'is_navigator_enabled': has_navigator(request.user),
       'optimizer_url': get_optimizer_url(),
       'navigator_url': get_navigator_url(),
     })
@@ -473,7 +473,7 @@ def describe_partitions(request, database, table):
         'request': request,
         'has_write_access': has_write_access(request.user),
         'is_optimizer_enabled': has_optimizer(),
-        'is_navigator_enabled': has_navigator(),
+        'is_navigator_enabled': has_navigator(request.user),
     })
 
 

+ 1 - 1
desktop/core/src/desktop/templates/assist.mako

@@ -1415,7 +1415,7 @@ from metadata.conf import has_navigator
           user: params.user
         });
 
-        self.navigatorEnabled = ko.observable('${ has_navigator() }' === 'True');
+        self.navigatorEnabled = ko.observable('${ has_navigator(user) }' === 'True');
 
         self.searchInput = ko.observable('').extend({ rateLimit: 500 });
         self.searchResult = ko.observableArray();

+ 1 - 5
desktop/core/src/desktop/templates/nav_components.mako

@@ -15,12 +15,8 @@
 ## limitations under the License.
 
 <%!
-from desktop import conf
-from desktop.conf import USE_NEW_SIDE_PANELS
-from desktop.lib.i18n import smart_unicode
 from desktop.views import _ko
 from django.utils.translation import ugettext as _
-from metadata.conf import has_navigator
 %>
 
 <%def name="nav_tags()">
@@ -32,7 +28,7 @@ from metadata.conf import has_navigator
      <!-- /ko -->
      <div style="width: 100%" data-bind="ifnot: loading">
        <textarea style="width: 100%" data-bind="tagEditor: {
-          placeholder: '${_ko('No tags found...')}',
+          placeholder: '${_ko('No tags.')}',
           setTags: currentTags,
           onSave: onSave,
           load: loadTags

+ 1 - 1
desktop/core/src/desktop/templates/sql_context_popover.mako

@@ -605,7 +605,7 @@ from metadata.conf import has_navigator
           isColumn: isColumn
         });
 
-        %if has_navigator():
+        %if has_navigator(user):
         self.tabs.push({
           id: 'tags',
           label: '${ _("Tags") }',

+ 5 - 2
desktop/libs/metadata/src/metadata/conf.py

@@ -22,6 +22,8 @@ from desktop.conf import AUTH_USERNAME as DEFAULT_AUTH_USERNAME, AUTH_PASSWORD a
 from desktop.lib.conf import Config, ConfigSection, coerce_bool, coerce_password_from_script
 from desktop.lib.paths import get_config_root
 
+from metadata.settings import DJANGO_APPS
+
 
 def get_auth_username():
   """Get from top level default from desktop"""
@@ -59,8 +61,9 @@ def get_navigator_url():
   return NAVIGATOR.API_URL.get() and NAVIGATOR.API_URL.get().strip('/')[:-3]
 
 
-def has_navigator():
-  return bool(get_navigator_url() and NAVIGATOR.AUTH_PASSWORD.get())
+def has_navigator(user):
+  return bool(get_navigator_url() and NAVIGATOR.AUTH_PASSWORD.get()) \
+   and user.is_superuser or user.has_hue_permission(action="access", app=DJANGO_APPS[0])
 
 
 OPTIMIZER = ConfigSection(

+ 1 - 1
desktop/libs/metadata/src/metadata/navigator_api.py

@@ -38,7 +38,7 @@ class MetadataApiException(Exception):
 def error_handler(view_fn):
   def decorator(*args, **kwargs):
     try:
-      if has_navigator():
+      if has_navigator(args[0].user):
         return view_fn(*args, **kwargs)
       else:
         raise MetadataApiException('Navigator API is not configured.')

+ 6 - 1
desktop/libs/metadata/src/metadata/navigator_client_tests.py

@@ -20,6 +20,9 @@ import logging
 from nose.plugins.skip import SkipTest
 from nose.tools import assert_equal
 
+from django.contrib.auth.models import User
+
+from desktop.lib.django_test_util import make_logged_in_client
 from hadoop.pseudo_hdfs4 import is_live_cluster
 
 from metadata.conf import has_navigator
@@ -38,7 +41,9 @@ class TestNavigatorclient:
 
   @classmethod
   def setup_class(cls):
-    if not is_live_cluster() or not has_navigator(): # Until v1
+    cls.client = make_logged_in_client(username='test', is_superuser=False)
+    cls.user = User.objects.get(username='test')
+    if not is_live_cluster() or not has_navigator(cls.user): # Until v1
       raise SkipTest
 
   def test_search_entities(self):

+ 3 - 1
desktop/libs/metadata/src/metadata/navigator_tests.py

@@ -39,8 +39,10 @@ class TestNavigatorApi(object):
 
   @classmethod
   def setup_class(cls):
+    cls.client = make_logged_in_client(username='test', is_superuser=False)
+    cls.user = User.objects.get(username='test')
 
-    if not is_live_cluster() or not has_navigator():
+    if not is_live_cluster() or not has_navigator(cls.user):
       raise SkipTest
 
     cls.client = make_logged_in_client(username='test', is_superuser=False)

+ 2 - 2
desktop/libs/notebook/src/notebook/views.py

@@ -80,7 +80,7 @@ def notebook(request):
           'languages': get_interpreters(request.user),
           'session_properties': SparkApi.get_properties(),
           'is_optimizer_enabled': has_optimizer(),
-          'is_navigator_enabled': has_navigator(),
+          'is_navigator_enabled': has_navigator(request.user),
           'editor_type': 'notebook'
       }),
       'is_yarn_mode': is_yarn_mode,
@@ -103,7 +103,7 @@ def editor(request):
           'languages': get_interpreters(request.user),
           'mode': 'editor',
           'is_optimizer_enabled': has_optimizer(),
-          'is_navigator_enabled': has_navigator(),
+          'is_navigator_enabled': has_navigator(request.user),
           'editor_type': editor_type
       })
   })