瀏覽代碼

HUE-8530 [organization] Add org filtering to get user API

Romain 5 年之前
父節點
當前提交
d4cdc24380

+ 3 - 3
apps/useradmin/src/useradmin/api.py

@@ -21,7 +21,7 @@ from desktop.decorators import check_superuser_permission
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.i18n import smart_unicode
 
-from useradmin.models import User, Group
+from useradmin.models import User, Group, orm_user_lookup
 
 
 LOG = logging.getLogger(__name__)
@@ -64,7 +64,7 @@ def get_users(request):
     users = users.filter(is_active=True)
 
   if username:
-    users = users.filter(username=username)
+    users = users.filter({orm_user_lookup(): username})
 
   if groups:
     group_ids = []
@@ -77,7 +77,7 @@ def get_users(request):
         LOG.exception("Failed to filter by group, group with name %s not found." % groupname)
     users = users.filter(groups__in=group_ids)
 
-  users = users.order_by('username')
+  users = users.order_by(orm_user_lookup())
 
   for user in users:
     user = {

+ 1 - 1
apps/useradmin/src/useradmin/models2.py

@@ -111,7 +111,7 @@ class UserManager(BaseUserManager):
     queryset = super(UserManager, self).get_queryset()
     request = CrequestMiddleware.get_request()
 
-    if request and hasattr(request, 'user') and type(request.user) is not SimpleLazyObject:
+    if request and hasattr(request, 'user') and type(request.user._wrapped) is not object:  # Avoid infinite recursion
       queryset = queryset.filter(
         organization=request.user.organization
       )

+ 7 - 4
apps/useradmin/src/useradmin/models2_tests.py

@@ -16,6 +16,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import json
 import sys
 import unittest
 
@@ -57,7 +58,6 @@ class TestOrganizationSingleUser(unittest.TestCase):
     cls.user3.delete()
     cls.user4.delete()
 
-
   def test_user_group(self):
     user1_organization = Organization.objects.get(name='user1@testorg.gethue.com')
 
@@ -69,16 +69,19 @@ class TestOrganizationSingleUser(unittest.TestCase):
       list(self.user1.groups.all())
     )
 
-
   def test_users_groups(self):
     assert_equal(4, User.objects.filter(email__contains='testorg.gethue.com').count(), User.objects.all())
     assert_equal(4, Organization.objects.filter(name__contains='testorg.gethue.com').count(), Organization.objects.all())
     assert_equal(4, Group.objects.filter(organization__name__contains='testorg.gethue.com').count(), Group.objects.all())
 
-
   def test_get_users(self):
+    # View
+    response = self.client1.get('/useradmin/users/')
+    assert_equal([self.user1], list(response.context[0]['users']))
+
+    # API
     response = self.client1.get('/useradmin/api/get_users/')
     data = json.loads(response.content)
 
     assert_equal(0, data['status'])
-    assert_equal([self.user1.email], [user['email'] for user in data['users']])
+    assert_equal([self.user1.email], [user['username'] for user in data['users']])

+ 3 - 3
desktop/core/src/desktop/settings.py

@@ -20,14 +20,15 @@
 # Local customizations are done by symlinking a file
 # as local_settings.py.
 
-from builtins import map
-from builtins import zip
+from builtins import map, zip
+import datetime
 import gc
 import json
 import logging
 import os
 import pkg_resources
 import sys
+import uuid
 
 import django_opentracing
 
@@ -509,7 +510,6 @@ SECRET_KEY = desktop.conf.get_secret_key()
 if SECRET_KEY:
   SECRET_KEY += str(AUTHENTICATION_BACKENDS)
 else:
-  import uuid
   SECRET_KEY = str(uuid.uuid4())
 
 # Axes