فهرست منبع

HUE-8945 [useradmin] Only list permissions of enabled apps

Romain 6 سال پیش
والد
کامیت
77d766a5f8
2فایلهای تغییر یافته به همراه52 افزوده شده و 16 حذف شده
  1. 48 15
      apps/useradmin/src/useradmin/tests.py
  2. 4 1
      apps/useradmin/src/useradmin/views.py

+ 48 - 15
apps/useradmin/src/useradmin/tests.py

@@ -38,6 +38,10 @@ from django.urls import reverse
 from django.test.client import Client
 
 import desktop.conf
+
+from desktop import appmanager
+from desktop.auth.backend import is_admin
+from desktop.conf import APP_BLACKLIST
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.test_utils import grant_access
 from desktop.views import home
@@ -45,15 +49,13 @@ from hadoop import pseudo_hdfs4
 from hadoop.pseudo_hdfs4 import is_live_cluster
 
 import useradmin.conf
-from useradmin.forms import UserChangeForm
 import useradmin.ldap_access
+from useradmin.forms import UserChangeForm
 from useradmin.middleware import ConcurrentUserSessionMiddleware
 from useradmin.models import HuePermission, GroupPermission, UserProfile
 from useradmin.models import get_profile, get_default_user_group
 from useradmin.hue_password_policy import reset_password_policy
 
-from desktop.auth.backend import is_admin
-
 
 def reset_all_users():
   """Reset to a clean state by deleting all users"""
@@ -295,8 +297,7 @@ class TestUserAdmin(BaseUserAdminTests):
     # Validate user is not a checked superuser
     assert_false(supertest.is_superuser)
     # Validate user is superuser by group
-    assert_equal(UserProfile.objects.get(user__username='supertest').has_hue_permission(action="superuser",
-                                                                                       app="useradmin"), 1)
+    assert_equal(UserProfile.objects.get(user__username='supertest').has_hue_permission(action="superuser", app="useradmin"), 1)
 
     # Make sure that a user of supergroup can access /useradmin/users
     # Create user to try to edit
@@ -309,11 +310,14 @@ class TestUserAdmin(BaseUserAdminTests):
     assert_true('Hue Permissions - Edit app: useradmin' in response.content)
 
     # Revoke superuser privilege from groups
-    c.post('/useradmin/permissions/edit/useradmin/superuser',
-           dict(app='useradmin',
-           priv='superuser',
-           groups=[],
-           save="Save"), follow=True)
+    c.post('/useradmin/permissions/edit/useradmin/superuser', dict(
+        app='useradmin',
+        priv='superuser',
+        groups=[],
+        save="Save"
+      ),
+      follow=True
+    )
     assert_equal(len(GroupPermission.objects.all()), 1)
 
     # Now test that we have limited access
@@ -343,11 +347,14 @@ class TestUserAdmin(BaseUserAdminTests):
     assert_true('must be a superuser to change permissions' in response.content)
 
     # And revoke access from the group
-    c.post('/useradmin/permissions/edit/useradmin/access',
-           dict(app='useradmin',
-           priv='access',
-           groups=[],
-           save="Save"), follow=True)
+    c.post('/useradmin/permissions/edit/useradmin/access', dict(
+        app='useradmin',
+        priv='access',
+        groups=[],
+        save="Save"
+      ),
+      follow=True
+    )
     assert_true(len(GroupPermission.objects.all()) == 0)
     assert_false(get_profile(test_user).has_hue_permission('access','useradmin'))
 
@@ -356,6 +363,32 @@ class TestUserAdmin(BaseUserAdminTests):
     assert_true('You do not have permission to access the Useradmin application.' in response.content)
 
 
+  def test_list_permissions(self):
+    c1 = make_logged_in_client(username="nonadmin", is_superuser=False)
+    grant_access('nonadmin', 'nonadmin', 'useradmin')
+    grant_access('nonadmin', 'nonadmin', 'beeswax')
+
+    response = c1.get('/useradmin/permissions/')
+    assert_equal(200, response.status_code)
+
+    perms = response.context[0]['permissions']
+    assert_true(perms.filter(app='beeswax').exists(), perms) # Assumes beeswax is there
+
+    reset = APP_BLACKLIST.set_for_testing('beeswax')
+    appmanager.DESKTOP_MODULES = []
+    appmanager.DESKTOP_APPS = None
+    appmanager.load_apps(APP_BLACKLIST.get())
+    try:
+      response = c1.get('/useradmin/permissions/')
+      perms = response.context[0]['permissions']
+      assert_false(perms.filter(app='beeswax').exists(), perms) # beeswax is not there now
+    finally:
+      reset()
+      appmanager.DESKTOP_MODULES = []
+      appmanager.DESKTOP_APPS = None
+      appmanager.load_apps(APP_BLACKLIST.get())
+
+
   def test_default_group(self):
     resets = [
       useradmin.conf.DEFAULT_USER_GROUP.set_for_testing('test_default')

+ 4 - 1
apps/useradmin/src/useradmin/views.py

@@ -45,6 +45,7 @@ import desktop.conf
 from desktop.conf import LDAP
 from desktop.lib.django_util import JsonResponse, render
 from desktop.lib.exceptions_renderable import PopupException
+from desktop.models import _get_apps
 from desktop.views import antixss
 
 from hadoop.fs.exceptions import WebHdfsException
@@ -87,8 +88,10 @@ def list_groups(request):
 
 
 def list_permissions(request):
+  current_app, other_apps, apps_list = _get_apps(request.user)
+
   return render("list_permissions.mako", request, {
-    'permissions': HuePermission.objects.all(),
+    'permissions': HuePermission.objects.filter(app__in=apps_list),
     'is_embeddable': request.GET.get('is_embeddable', False)
   })