瀏覽代碼

HUE-9096 [doc] Adding is_link_on to share method

Romain 6 年之前
父節點
當前提交
0eff57e9c5
共有 2 個文件被更改,包括 20 次插入12 次删除
  1. 11 5
      desktop/core/src/desktop/document2_tests.py
  2. 9 7
      desktop/core/src/desktop/models.py

+ 11 - 5
desktop/core/src/desktop/document2_tests.py

@@ -40,7 +40,7 @@ from desktop.converters import DocumentConverter
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.fs import ProxyFS
 from desktop.lib.fs import ProxyFS
 from desktop.lib.test_utils import grant_access
 from desktop.lib.test_utils import grant_access
-from desktop.models import Directory, Document2, Document
+from desktop.models import Directory, Document2, Document, Document2Permission
 
 
 
 
 class MockFs(object):
 class MockFs(object):
@@ -1078,7 +1078,7 @@ class TestDocument2Permissions(object):
       assert_false(doc.can_read(self.user_not_me))
       assert_false(doc.can_read(self.user_not_me))
       assert_false(doc.can_write(self.user_not_me))
       assert_false(doc.can_write(self.user_not_me))
 
 
-      doc.share(name=Document2Permission.LINK_READ_PERM, is_link_on=True)
+      doc.share(self.user, name=Document2Permission.LINK_READ_PERM, is_link_on=True)
 
 
       assert_true(doc.can_read(self.user))
       assert_true(doc.can_read(self.user))
       assert_true(doc.can_write(self.user))
       assert_true(doc.can_write(self.user))
@@ -1088,20 +1088,26 @@ class TestDocument2Permissions(object):
       assert_false(doc.get_permission('read').users.all())  # There is no doc listing via links, only direct access
       assert_false(doc.get_permission('read').users.all())  # There is no doc listing via links, only direct access
       assert_false(doc.get_permission('read').groups.all())
       assert_false(doc.get_permission('read').groups.all())
 
 
-      doc.share(name=Document2Permission.LINK_READ_PERM, is_link_on=False)
+      doc.share(self.user, name=Document2Permission.LINK_READ_PERM, is_link_on=False)
 
 
       assert_true(doc.can_read(self.user))
       assert_true(doc.can_read(self.user))
       assert_true(doc.can_write(self.user))
       assert_true(doc.can_write(self.user))
       assert_false(doc.can_read(self.user_not_me))
       assert_false(doc.can_read(self.user_not_me))
       assert_false(doc.can_write(self.user_not_me))
       assert_false(doc.can_write(self.user_not_me))
 
 
-      doc.share(name=Document2Permission.LINK_READ_PERM, is_link_on=True)
-      doc.share(name=Document2Permission.LINK_WRITE_PERM, is_link_on=True)
+      doc.share(self.user, name=Document2Permission.LINK_WRITE_PERM, is_link_on=True)
 
 
       assert_true(doc.can_read(self.user))
       assert_true(doc.can_read(self.user))
       assert_true(doc.can_write(self.user))
       assert_true(doc.can_write(self.user))
       assert_true(doc.can_read(self.user_not_me))
       assert_true(doc.can_read(self.user_not_me))
       assert_true(doc.can_write(self.user_not_me))
       assert_true(doc.can_write(self.user_not_me))
+
+      doc.share(self.user, name=Document2Permission.LINK_WRITE_PERM, is_link_on=False)
+
+      assert_true(doc.can_read(self.user))
+      assert_true(doc.can_write(self.user))
+      assert_false(doc.can_read(self.user_not_me))
+      assert_false(doc.can_write(self.user_not_me))
     finally:
     finally:
       doc.delete()
       doc.delete()
 
 

+ 9 - 7
desktop/core/src/desktop/models.py

@@ -1367,23 +1367,23 @@ class Document2(models.Model):
     except Document2Permission.DoesNotExist:
     except Document2Permission.DoesNotExist:
       return None
       return None
 
 
-  def share(self, user, name='read', users=None, groups=None):
+  def share(self, user, name='read', users=None, groups=None, is_link_on=False):
     try:
     try:
       with transaction.atomic():
       with transaction.atomic():
-        self.update_permission(user, name, users, groups)
+        self.update_permission(user, name, users, groups, is_link_on)
         # For directories, update all children recursively with same permissions
         # For directories, update all children recursively with same permissions
         for child in self.children.all():
         for child in self.children.all():
-          child.share(user, name, users, groups)
+          child.share(user, name, users, groups, is_link_on)
     except Exception as e:
     except Exception as e:
       raise PopupException(_("Failed to share document: %s") % e)
       raise PopupException(_("Failed to share document: %s") % e)
     return self
     return self
 
 
-  def update_permission(self, user, name='read', users=None, groups=None):
+  def update_permission(self, user, name='read', users=None, groups=None, is_link_on=False):
     # Check if user has access to grant permissions
     # Check if user has access to grant permissions
     if users or groups:
     if users or groups:
-      if name == 'read':
+      if name == 'read' or name == 'link_read':
         self.can_read_or_exception(user)
         self.can_read_or_exception(user)
-      elif name == 'write':
+      elif name == 'write' or name == 'link_write':
         self.can_write_or_exception(user)
         self.can_write_or_exception(user)
       else:
       else:
         raise ValueError(_('Invalid permission type: %s') % name)
         raise ValueError(_('Invalid permission type: %s') % name)
@@ -1398,6 +1398,8 @@ class Document2(models.Model):
     if groups is not None:
     if groups is not None:
       perm.groups = groups
       perm.groups = groups
 
 
+    perm.is_link_on = is_link_on
+
     perm.save()
     perm.save()
 
 
   def _get_doc1(self, doc2_type=None):
   def _get_doc1(self, doc2_type=None):
@@ -1583,7 +1585,7 @@ class Document2Permission(models.Model):
     """
     """
     Returns true if the given user has permissions based on users, groups, or all flag
     Returns true if the given user has permissions based on users, groups, or all flag
     """
     """
-    return self.groups.filter(id__in=user.groups.all()).exists() or user in self.users.all()
+    return self.groups.filter(id__in=user.groups.all()).exists() or user in self.users.all() or self.is_link_on
 
 
 
 
 def get_cluster_config(user):
 def get_cluster_config(user):