Bladeren bron

HUE-9096 [doc] Adding is_link_on to share method

Romain 6 jaren geleden
bovenliggende
commit
0eff57e9c5
2 gewijzigde bestanden met toevoegingen van 20 en 12 verwijderingen
  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):