浏览代码

HUE-4053 [oozie] Check permissions based on USE_NEW_EDITOR status

Jenny Kim 9 年之前
父节点
当前提交
b7a2243
共有 2 个文件被更改,包括 35 次插入3 次删除
  1. 8 2
      apps/oozie/src/oozie/decorators.py
  2. 27 1
      apps/oozie/src/oozie/tests2.py

+ 8 - 2
apps/oozie/src/oozie/decorators.py

@@ -21,6 +21,7 @@ import logging
 from django.utils.functional import wraps
 from django.utils.translation import ugettext as _
 
+from desktop.conf import USE_NEW_EDITOR
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.models import Document, Document2
 
@@ -54,10 +55,15 @@ def check_document_access_permission():
         if doc_id is not None:
           doc2 = Document2.objects.get(id=doc_id)
         elif uuid is not None:
-          doc2 = Document2.objects.get_by_uuid(user=request.user, uuid=uuid)
+          # TODO: The commented line should be used once we fully transition to doc2
+          # doc2 = Document2.objects.get_by_uuid(user=request.user, uuid=uuid, perm_type=None)
+          doc2 = Document2.objects.filter(uuid=uuid).order_by('-last_modified').first()
 
         if doc2:
-          doc2.doc.get().can_read_or_exception(request.user)
+          if USE_NEW_EDITOR.get():
+            doc2.can_read_or_exception(request.user)
+          else:
+            doc2.doc.get().can_read_or_exception(request.user)
       except Document2.DoesNotExist:
         raise PopupException(_('Job with %(key)s=%(value)s does not exist') %
                              {'key': 'id' if doc_id else 'uuid', 'value': doc_id or uuid})

+ 27 - 1
apps/oozie/src/oozie/tests2.py

@@ -25,7 +25,7 @@ from django.db.models import Q
 
 from nose.tools import assert_true, assert_false, assert_equal, assert_not_equal
 
-from desktop.conf import USE_DEFAULT_CONFIGURATION
+from desktop.conf import USE_DEFAULT_CONFIGURATION, USE_NEW_EDITOR
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.test_utils import add_permission, add_to_group, grant_access, remove_from_group
 from desktop.models import DefaultConfiguration, Document, Document2
@@ -46,6 +46,10 @@ class TestEditor(OozieMockBase):
     super(TestEditor, self).setUp()
     self.wf = Workflow()
 
+    self.client_not_me = make_logged_in_client(username="not_perm_user", groupname="default", recreate=True,
+                                               is_superuser=False)
+    self.user_not_me = User.objects.get(username="not_perm_user")
+
 
   def test_parsing(self):
     assert_equal(['input', 'LIMIT', 'out'], find_dollar_variables("""
@@ -383,6 +387,7 @@ LIMIT $limit"""))
     subworkflow_doc.delete()
     query_doc.delete()
 
+
   def test_editor_access_permissions(self):
     group = 'no_editor'
 
@@ -411,6 +416,27 @@ LIMIT $limit"""))
       remove_from_group("test", group)
 
 
+  def test_share_workflow(self):
+    try:
+      wf_doc = save_temp_workflow(MockOozieApi.JSON_WORKFLOW_LIST[5], self.user)
+
+      # other user cannot view document
+      response = self.client_not_me.get(reverse('oozie:edit_workflow'), {'uuid': wf_doc.uuid})
+      assert_equal(response.status_code, 500)
+
+      # Share write perm by user
+      if USE_NEW_EDITOR.get():
+        wf_doc.share(wf_doc.owner, name='write', users=[self.user_not_me])
+      else:
+        wf_doc.doc.get().sync_permissions({'write': {'user_ids': [self.user_not_me.id], 'group_ids': []}})
+
+      # other user can access document
+      response = self.client_not_me.get(reverse('oozie:edit_workflow'), {'workflow': wf_doc.uuid})
+      assert_equal(response.status_code, 200)
+    finally:
+      wf_doc.delete()
+
+
   def test_list_editor_workflows(self):
     wf_doc = save_temp_workflow(MockOozieApi.JSON_WORKFLOW_LIST[5], self.user)
     reset = ENABLE_V2.set_for_testing(True)