Explorar o código

[sentry] Implement doas view mode

Romain Rigaux %!s(int64=11) %!d(string=hai) anos
pai
achega
de5a1b5

+ 1 - 1
apps/beeswax/src/beeswax/api.py

@@ -83,7 +83,7 @@ def autocomplete(request, database=None, table=None):
   query_server = get_query_server_config(app_name)
   do_as = request.user
   if (request.user.is_superuser or request.user.has_hue_permission(action="impersonate", app="security")) and 'doas' in request.GET:
-    do_as = User.object.get(username=request.GET.get('doas'))
+    do_as = User.objects.get(username=request.GET.get('doas'))
   db = dbms.get(do_as, query_server)
   response = {}
 

+ 23 - 0
apps/security/src/security/api/hive.py

@@ -25,6 +25,29 @@ from libsentry.api import get_api
 from libsentry.sentry_site import get_sentry_server_admin_groups
 from hadoop.cluster import get_defaultfs
 
+from beeswax.api import autocomplete
+
+
+def fetch_hive_path(request):
+  path = request.GET['path']
+
+  database = None
+  table = None
+  if path:
+    database = path
+  if '/' in path:
+    database, table = path.split('/')
+
+  resp = autocomplete(request, database, table)
+
+  if database and request.GET['doas'] != request.user.username:
+    request.GET = request.GET.copy()
+    request.GET['doas'] = request.GET['doas']
+
+    resp = autocomplete(request, database, table)
+
+  return resp
+
 
 def list_sentry_roles_by_group(request):
   result = {'status': -1, 'message': 'Error'}

+ 3 - 0
apps/security/src/security/urls.py

@@ -36,6 +36,8 @@ urlpatterns += patterns('security.api.hdfs',
 
 
 urlpatterns += patterns('security.api.hive',
+  url(r'^api/hive/fetch_hive_path', 'fetch_hive_path', name='fetch_hive_path'),
+
   url(r'^api/hive/list_sentry_roles_by_group', 'list_sentry_roles_by_group', name='list_sentry_roles_by_group'),
   url(r'^api/hive/list_sentry_privileges_by_role', 'list_sentry_privileges_by_role', name='list_sentry_privileges_by_role'),
   url(r'^api/hive/list_sentry_privileges_for_provider$', 'list_sentry_privileges_for_provider', name='list_sentry_privileges_for_provider'),
@@ -49,5 +51,6 @@ urlpatterns += patterns('security.api.hive',
   url(r'^api/hive/bulk_add_privileges', 'bulk_add_privileges', name='bulk_add_privileges'),
   url(r'^api/hive/grant_privilege', 'grant_privilege', name='grant_privilege'),
 
+  # Unused: API is for blind bulk operations
   url(r'^api/hive/rename_sentry_privilege', 'rename_sentry_privilege', name='rename_sentry_privilege'),
 )

+ 7 - 2
apps/security/static/js/hive.ko.js

@@ -694,7 +694,12 @@ var Assist = function (vm, initial) {
     if (_originalPath.split(".").length < 3) {
       var _path = _originalPath.replace('.', '/');
       var request = {
-        url: '/beeswax/api/autocomplete/' + _path,
+        url: '/security/api/hive/fetch_hive_path',
+        data: {
+          'path': _path,
+          'doas': vm.doAs(),
+          'isDiffMode': self.isDiffMode()
+        },
         dataType: 'json',
         type: 'GET',
         success: function (data) {
@@ -812,7 +817,7 @@ var HiveViewModel = function (initial) {
 
   self.doAs = ko.observable(initial.user);
   self.doAs.subscribe(function () {
-    self.assist.fetchHivePath();
+    self.assist.refreshTree();
   });
   self.availableHadoopUsers = ko.observableArray();