Преглед изворни кода

HUE-8530 [organization] Unify permissions for the admin wizard

Romain пре 5 година
родитељ
комит
000172ce49

+ 1 - 1
apps/about/src/about/templates/admin_wizard.mako

@@ -89,7 +89,7 @@ ${ layout.menubar(section='quick_start') }
 
           <div id="step3" class="stepDetails hide">
             <div>
-              <h3>${ _('Install individual application examples') }</h3>
+              <h3>${ _('Install some data examples') }</h3>
               <ul class="unstyled samples">
               % if 'hive' in app_names:
                   <li>

+ 2 - 2
apps/about/src/about/views.py

@@ -22,7 +22,7 @@ import logging
 from django.utils.translation import ugettext as _
 
 from desktop import appmanager
-from desktop.auth.backend import is_admin
+from desktop.auth.backend import is_hue_admin
 from desktop.auth.decorators import admin_required
 from desktop.lib.django_util import JsonResponse, render, login_notrequired
 from desktop.log.access import access_log_level
@@ -31,7 +31,7 @@ from desktop.views import collect_usage
 
 
 def admin_wizard(request):
-  if is_admin(request.user):
+  if is_hue_admin(request.user):
     apps = appmanager.get_apps(request.user)
   else:
     apps = []

+ 7 - 7
desktop/core/src/desktop/templates/about_layout.mako

@@ -44,7 +44,7 @@ def is_selected(section, matcher):
                   <a href="${ url('about:admin_wizard') }">${_('Quick start')}</a>
                 </li>
               % endif
-              % if is_admin(user):
+              % if is_hue_admin(user):
                 <li class="${is_selected(section, 'dump_config')}">
                   <a href="${ url('desktop.views.dump_config') }">${_('Configuration')}</a>
                 </li>
@@ -54,12 +54,12 @@ def is_selected(section, matcher):
                   <a href="${ url('desktop.lib.connectors.views.index') }">${_('Connectors')}</a>
                 </li>
               % endif
-              % if is_admin(user):
-                % if ANALYTICS.IS_ENABLED.get():
-                <li class="${is_selected(section, 'analytics')}">
-                  <a href="${ url('desktop.lib.analytics.views.index') }">${_('Analytics')}</a>
-                </li>
-                % endif
+              % if ANALYTICS.IS_ENABLED.get() and (is_hue_admin(user) or is_admin(user)):
+              <li class="${is_selected(section, 'analytics')}">
+                <a href="${ url('desktop.lib.analytics.views.index') }">${_('Analytics')}</a>
+              </li>
+              % endif
+              % if is_hue_admin(user):
                 <li class="${is_selected(section, 'log_view')}">
                   <a href="${ url('desktop.views.log_view') }">${_('Server Logs')}</a>
                 </li>

+ 4 - 6
desktop/core/src/desktop/templates/common_header.mako

@@ -15,18 +15,16 @@
 ## limitations under the License.
 <%!
 from django.utils.translation import ugettext as _
+from webpack_loader.templatetags.webpack_loader import render_bundle
+
+from metadata.conf import has_optimizer, OPTIMIZER
 
 from desktop import conf
+from desktop.auth.backend import is_admin
 from desktop.conf import USE_NEW_EDITOR
 from desktop.models import hue_version
 from desktop.lib.i18n import smart_unicode
 
-from metadata.conf import has_optimizer, OPTIMIZER
-
-from desktop.auth.backend import is_admin
-
-from webpack_loader.templatetags.webpack_loader import render_bundle
-
 home_url = url('desktop_views_home')
 if USE_NEW_EDITOR.get():
   home_url = url('desktop_views_home2')

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

@@ -19,7 +19,7 @@ import logging
 import sys
 
 from desktop.views import commonheader, commonfooter
-from django.utils.translation import ugettext as _
+
 
 LOG = logging.getLogger(__name__)
 %>

+ 31 - 28
desktop/core/src/desktop/views.py

@@ -50,6 +50,7 @@ import desktop.log.log_buffer
 from desktop import appmanager
 from desktop.api import massaged_tags_for_json, massaged_documents_for_json, _get_docs
 from desktop.auth.backend import is_admin
+from desktop.auth.decorators import admin_required, hue_admin_required
 from desktop.conf import USE_NEW_EDITOR, HUE_LOAD_BALANCER, get_clusters, ENABLE_CONNECTORS
 from desktop.lib import django_mako, fsmanager
 from desktop.lib.conf import GLOBAL_CONFIG, BoundConfig, _configs_from_dir
@@ -180,6 +181,7 @@ def log_analytics(request):
   return JsonResponse({'status': 0})
 
 
+@hue_admin_required
 @access_log_level(logging.WARN)
 def log_view(request):
   """
@@ -187,26 +189,31 @@ def log_view(request):
   If it is attached to the root logger, this view will display that history,
   otherwise it will report that it can't be found.
   """
-  if not is_admin(request.user):
-    return HttpResponse(_("You must be a superuser."))
-
   hostname = socket.gethostname()
   l = logging.getLogger()
+
   for h in l.handlers:
     if isinstance(h, desktop.log.log_buffer.FixedBufferHandler):
-      return render('logs.mako', request, dict(log=[l for l in h.buf], query=request.GET.get("q", ""), hostname=hostname, is_embeddable=request.GET.get('is_embeddable', False)))
-
-  return render('logs.mako', request, dict(log=[_("No logs found!")], query='', hostname=hostname, is_embeddable=request.GET.get('is_embeddable', False)))
+      return render('logs.mako', request,
+        dict(
+          log=[l for l in h.buf],
+          query=request.GET.get("q", ""),
+          hostname=hostname, is_embeddable=request.GET.get('is_embeddable', False)
+        )
+      )
+
+  return render('logs.mako', request, dict(
+      log=[_("No logs found!")], query='', hostname=hostname, is_embeddable=request.GET.get('is_embeddable', False)
+    )
+  )
 
 
+@hue_admin_required
 @access_log_level(logging.WARN)
 def download_log_view(request):
   """
   Zip up the log buffer and then return as a file attachment.
   """
-  if not is_admin(request.user):
-    return HttpResponse(_("You must be a superuser."))
-
   l = logging.getLogger()
   for h in l.handlers:
     if isinstance(h, desktop.log.log_buffer.FixedBufferHandler):
@@ -280,6 +287,7 @@ def status_bar(request):
   return HttpResponse(resp)
 
 
+@hue_admin_required
 def dump_config(request):
   if not is_admin(request.user):
     return HttpResponse(_("You must be a superuser."))
@@ -287,26 +295,23 @@ def dump_config(request):
   return render("dump_config.mako", request, {})
 
 
+@hue_admin_required
 @access_log_level(logging.WARN)
 def threads(request):
   """Dumps out server threads. Useful for debugging."""
   out = string_io()
   dump_traceback(file=out)
 
-  if not is_admin(request.user):
-    return HttpResponse(_("You must be a superuser."))
-
   if request.is_ajax():
     return HttpResponse(out.getvalue(), content_type="text/plain")
   else:
     return render("threads.mako", request, {'text': out.getvalue(), 'is_embeddable': request.GET.get('is_embeddable', False)})
 
 
+@hue_admin_required
 @access_log_level(logging.WARN)
 def memory(request):
   """Dumps out server threads. Useful for debugging."""
-  if not is_admin(request.user):
-    return HttpResponse(_("You must be a superuser."))
 
   if not hasattr(settings, 'MEMORY_PROFILER'):
     return HttpResponse(_("You must enable the memory profiler via the memory_profiler config in the hue.ini."))
@@ -353,6 +358,7 @@ def global_js_constants(request):
     }
   }), content_type="application/javascript")
 
+
 def ace_sql_location_worker(request):
   return HttpResponse(render('ace_sql_location_worker.mako', request, None), content_type="application/javascript")
 
@@ -427,6 +433,7 @@ _MAX_LOG_FRONTEND_EVENT_LENGTH = 1024
 
 _LOG_FRONTEND_LOGGER = logging.getLogger("desktop.views.log_frontend_event")
 
+
 @login_notrequired
 def log_frontend_event(request):
   """
@@ -695,10 +702,9 @@ def collect_validation_messages(conf, error_list):
     error_list.append(error)
 
 
+@admin_required
 def check_config(request):
   """Check config and view for the list of errors"""
-  if not is_admin(request.user):
-    return HttpResponse(_("You must be a superuser."))
 
   context = {
     'conf_dir': os.path.realpath(os.getenv("HUE_CONF_DIR", get_desktop_root("conf"))),
@@ -711,19 +717,20 @@ def check_config(request):
     return render('check_config.mako', request, context, force_template=True)
 
 
+@admin_required
 def check_config_ajax(request):
   """Alert administrators about configuration problems."""
-  if not is_admin(request.user):
-    return HttpResponse('')
 
   error_list = _get_config_errors(request)
   if not error_list:
     # Return an empty response, rather than using the mako template, for performance.
     return HttpResponse('')
-  return render('config_alert_dock.mako',
-                request,
-                dict(error_list=error_list),
-                force_template=True)
+  else:
+    return render('config_alert_dock.mako',
+        request,
+        dict(error_list=error_list),
+        force_template=True
+    )
 
 
 def get_debug_level(request):
@@ -731,20 +738,16 @@ def get_debug_level(request):
 
 
 @require_POST
+@admin_required
 def set_all_debug(request):
-  if not is_admin(request.user):
-    return JsonResponse({'status': 1, 'message': _('You must be a superuser.')})
-
   _set_all_debug()
 
   return JsonResponse({'status': 0, 'debug_all': True})
 
 
 @require_POST
+@admin_required
 def reset_all_debug(request):
-  if not is_admin(request.user):
-    return JsonResponse({'status': 1, 'message': _('You must be a superuser.')})
-
   _reset_all_debug()
 
   return JsonResponse({'status': 0, 'debug_all': False})