Browse Source

[security] Implement Hive list_sentry_privileges_for_provider

Romain Rigaux 11 years ago
parent
commit
9e8b169

+ 32 - 0
apps/security/src/security/api.py

@@ -45,6 +45,24 @@ def list_sentry_roles_by_group(request):
   return HttpResponse(json.dumps(result), mimetype="application/json")
 
 
+def list_sentry_privileges_for_provider(request):
+  result = {'status': -1, 'message': 'Error'}
+
+  try:
+    groups = json.loads(request.POST['groups'])
+    roleSet = json.loads(request.POST['roleSet'])
+    authorizableHierarchy = json.loads(request.POST['authorizableHierarchy'])
+
+    sentry_privileges = get_api(request.user).list_sentry_privileges_for_provider(groups=groups, roleSet=roleSet, authorizableHierarchy=authorizableHierarchy)
+    result['sentry_privileges'] = sentry_privileges
+    result['message'] = ''
+    result['status'] = 0
+  except Exception, e:
+    result['message'] = unicode(str(e), "utf8")
+
+  return HttpResponse(json.dumps(result), mimetype="application/json")
+
+
 def list_sentry_privileges_by_role(request):
   result = {'status': -1, 'message': 'Error'}
 
@@ -91,6 +109,20 @@ def hive_edit_role(request):
   return HttpResponse(json.dumps(result), mimetype="application/json")
 
 
+def create_sentry_role(request):
+  result = {'status': -1, 'message': 'Error'}
+
+  try:
+    roleName = request.POST['roleName']
+
+    get_api(request.user).create_sentry_role(roleName)
+    result['message'] = ''
+    result['status'] = 0
+  except Exception, e:
+    result['message'] = unicode(str(e), "utf8")
+
+  return HttpResponse(json.dumps(result), mimetype="application/json")
+
 
 def create_sentry_role(request):
   result = {'status': -1, 'message': 'Error'}

+ 1 - 1
apps/security/src/security/templates/hive.mako

@@ -53,7 +53,7 @@ ${ layout.menubar(section='hive') }
         <div>
           <div class="span8">
             <div data-bind="foreach: $root.assist.files">
-              <div data-bind="text: $data"></div>
+              <div data-bind="text: $data, click: $root.list_sentry_privileges_for_provider"></div>
             </div>
           </div>
         </div>        

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

@@ -32,6 +32,7 @@ urlpatterns += patterns('security.api',
 urlpatterns += patterns('security.api',
   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'),  
   url(r'^api/hive/create_sentry_role', 'create_sentry_role', name='create_sentry_role'),
   url(r'^api/hive/drop_sentry_role', 'drop_sentry_role', name='drop_sentry_role'),
   url(r'^api/hive/edit_role$', 'hive_edit_role', name='hive_edit_role'),

+ 18 - 0
apps/security/static/js/hive.ko.js

@@ -128,6 +128,7 @@ var HiveViewModel = function (initial) {
         'roleName': role.name
       },
       success: function (data) {
+    	self.privileges.removeAll();
         $.each(data.sentry_privileges, function(index, item) {
           self.privileges.push(item); 
         });
@@ -137,6 +138,23 @@ var HiveViewModel = function (initial) {
       $(document).trigger("error", xhr.responseText);
     });
   };  
+  
+  self.list_sentry_privileges_for_provider = function(role) {
+    $.ajax({
+      type: "POST",
+      url: "/security/api/hive/list_sentry_privileges_for_provider",
+      data: {    	
+    	groups: ko.mapping.toJSON(['sambashare']),
+    	roleSet: ko.mapping.toJSON({all: true, roles: []}),
+        authorizableHierarchy: ko.mapping.toJSON({'server': 'aa', 'db': 'default'}),
+      },
+      success: function (data) {
+    	alert(ko.mapping.toJSON(data));
+      }
+    }).fail(function (xhr, textStatus, errorThrown) {
+      $(document).trigger("error", xhr.responseText);
+    });
+  }; 
 };
 
 function logGA(page) {

+ 1 - 1
desktop/libs/libsentry/src/libsentry/api.py

@@ -123,7 +123,7 @@ class SentryApi(object):
     response = self.client.list_sentry_privileges_for_provider(groups, roleSet, authorizableHierarchy)
     
     if response.status.value == 0:
-      return  [self._massage_priviledges(privilige) for privilige in response.privileges]
+      return list(response.privileges) # e.g. set(['server=+'])
     else:
       raise SentryException(response)
     

+ 1 - 1
desktop/libs/libsentry/src/libsentry/client.py

@@ -128,4 +128,4 @@ class SentryClient(object):
     if authorizableHierarchy is not None:
       authorizableHierarchy = TSentryAuthorizable(**authorizableHierarchy) 
     request = TListSentryPrivilegesForProviderRequest(groups=groups, roleSet=roleSet, authorizableHierarchy=authorizableHierarchy)
-    return self.client.list_sentry_roles_by_group(request)
+    return self.client.list_sentry_privileges_for_provider(request)