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.fs import ProxyFS
 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):
@@ -1078,7 +1078,7 @@ class TestDocument2Permissions(object):
       assert_false(doc.can_read(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_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').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_write(self.user))
       assert_false(doc.can_read(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_write(self.user))
       assert_true(doc.can_read(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:
       doc.delete()
 

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

@@ -1367,23 +1367,23 @@ class Document2(models.Model):
     except Document2Permission.DoesNotExist:
       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:
       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 child in self.children.all():
-          child.share(user, name, users, groups)
+          child.share(user, name, users, groups, is_link_on)
     except Exception as e:
       raise PopupException(_("Failed to share document: %s") % e)
     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
     if users or groups:
-      if name == 'read':
+      if name == 'read' or name == 'link_read':
         self.can_read_or_exception(user)
-      elif name == 'write':
+      elif name == 'write' or name == 'link_write':
         self.can_write_or_exception(user)
       else:
         raise ValueError(_('Invalid permission type: %s') % name)
@@ -1398,6 +1398,8 @@ class Document2(models.Model):
     if groups is not None:
       perm.groups = groups
 
+    perm.is_link_on = is_link_on
+
     perm.save()
 
   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
     """
-    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):