Procházet zdrojové kódy

HUE-2026 [core] Create a doc model write permission

change modify to write
Abraham Elmahrek před 11 roky
rodič
revize
9eac028bda

+ 1 - 1
apps/beeswax/src/beeswax/views.py

@@ -644,7 +644,7 @@ def authorized_get_design(request, design_id, owner_only=False, must_exist=False
       return None
 
   if owner_only:
-    design.doc.get().can_modify_or_exception(request.user)
+    design.doc.get().can_write_or_exception(request.user)
   else:
     design.doc.get().can_read_or_exception(request.user)
 

+ 1 - 1
apps/oozie/src/oozie/models.py

@@ -224,7 +224,7 @@ class Job(models.Model):
 
   def is_editable(self, user):
     """Only owners or admins can modify a job."""
-    return user.is_superuser or self.owner == user or self.doc.get().can_modify(user)
+    return user.is_superuser or self.owner == user or self.doc.get().can_write(user)
 
   @property
   def data_dict(self):

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_trashed_bundles.mako

@@ -180,8 +180,8 @@ ${ layout.menubar(section='bundles') }
     function toggleActions() {
       $(".toolbarBtn").attr("disabled", "disabled");
       var selector = $(".hueCheckbox[checked='checked']");
-      var can_modify = $(".hueCheckbox[checked='checked'][data-bundle-id]");
-      if (can_modify.length >= 1 && can_modify.length == selector.length) {
+      var can_write = $(".hueCheckbox[checked='checked'][data-bundle-id]");
+      if (can_write.length >= 1 && can_write.length == selector.length) {
         $("#destroy-btn").removeAttr("disabled");
         $("#restore-btn").removeAttr("disabled");
       }

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_trashed_coordinators.mako

@@ -182,8 +182,8 @@ ${ layout.menubar(section='coordinators') }
     function toggleActions() {
       $(".toolbarBtn").attr("disabled", "disabled");
       var selector = $(".hueCheckbox[checked='checked']");
-      var can_modify = $(".hueCheckbox[checked='checked'][data-coordinator-id]");
-      if (can_modify.length >= 1 && can_modify.length == selector.length) {
+      var can_write = $(".hueCheckbox[checked='checked'][data-coordinator-id]");
+      if (can_write.length >= 1 && can_write.length == selector.length) {
         $("#destroy-btn").removeAttr("disabled");
         $("#restore-btn").removeAttr("disabled");
       }

+ 2 - 2
apps/pig/src/pig/models.py

@@ -87,7 +87,7 @@ class PigScript(Document):
 def create_or_update_script(id, name, script, user, parameters, resources, hadoopProperties, is_design=True):
   try:
     pig_script = PigScript.objects.get(id=id)
-    pig_script.doc.get().can_modify_or_exception(user)
+    pig_script.doc.get().can_write_or_exception(user)
   except PigScript.DoesNotExist:
     pig_script = PigScript.objects.create(owner=user, is_design=is_design)
     Doc.objects.link(pig_script, owner=pig_script.owner, name=name)
@@ -122,7 +122,7 @@ def get_scripts(user, is_design=None):
       'resources': data['resources'],
       'hadoopProperties': data.get('hadoopProperties', []),
       'isDesign': script.is_design,
-      'can_modify': script.doc.get().can_modify(user)
+      'can_write': script.doc.get().can_write(user)
     }
     scripts.append(massaged_script)
 

+ 1 - 1
apps/pig/src/pig/templates/app.mako

@@ -118,7 +118,7 @@ ${ commonheader(None, "pig", user) | n,unicode }
             <li data-bind="click: editScriptProperties" data-section="properties">
               <a href="#"><i class="fa fa-bars"></i> ${ _('Properties') }</a>
             </li>
-            <li data-bind="click: saveScript, visible: currentScript().can_modify()">
+            <li data-bind="click: saveScript, visible: currentScript().can_write()">
               <a href="#" title="${ _('Save the script') }" rel="tooltip" data-placement="right">
                 <i class="fa fa-floppy-o"></i> ${ _('Save') }
               </a>

+ 2 - 2
apps/pig/static/js/pig.ko.js

@@ -37,7 +37,7 @@ var PigScript = function (pigScript) {
   self.id = ko.observable(pigScript.id);
   self.isDesign = ko.observable(pigScript.isDesign);
   self.name = ko.observable(pigScript.name);
-  self.can_modify = ko.observable(pigScript.can_modify);
+  self.can_write = ko.observable(pigScript.can_write);
   self.script = ko.observable(pigScript.script);
   self.scriptSumup = ko.observable(pigScript.script.replace(/\W+/g, ' ').substring(0, 100));
   self.isRunning = ko.observable(false);
@@ -207,7 +207,7 @@ var PigViewModel = function (props) {
     resources: self.LABELS.NEW_SCRIPT_RESOURCES,
     hadoopProperties: self.LABELS.NEW_SCRIPT_HADOOP_PROPERTIES,
     parentModel: self,
-    can_modify: true
+    can_write: true
   };
 
   self.currentScript = ko.observable(new PigScript(_defaultScript));

+ 8 - 8
desktop/core/src/desktop/api.py

@@ -129,7 +129,7 @@ def massaged_documents_for_json(documents, user):
 
   for document in documents:
     read_perms = document.list_permissions(perm='read')
-    modify_perms = document.list_permissions(perm='modify')
+    write_perms = document.list_permissions(perm='write')
     docs[document.id] = {
       'id': document.id,
       'contentType': document.content_type.name,
@@ -143,9 +143,9 @@ def massaged_documents_for_json(documents, user):
           'users': [{'id': perm_user.id, 'username': perm_user.username} for perm_user in read_perms.users.all()],
           'groups': [{'id': perm_group.id, 'name': perm_group.name} for perm_group in read_perms.groups.all()]
         },
-        'modify': {
-          'users': [{'id': perm_user.id, 'username': perm_user.username} for perm_user in modify_perms.users.all()],
-          'groups': [{'id': perm_group.id, 'name': perm_group.name} for perm_group in modify_perms.groups.all()]
+        'write': {
+          'users': [{'id': perm_user.id, 'username': perm_user.username} for perm_user in write_perms.users.all()],
+          'groups': [{'id': perm_group.id, 'name': perm_group.name} for perm_group in write_perms.groups.all()]
         }
       },
       'owner': document.owner.username,
@@ -159,7 +159,7 @@ def massaged_documents_for_json(documents, user):
 
 def massage_doc_for_json(doc, user):
   read_perms = doc.list_permissions(perm='read')
-  modify_perms = doc.list_permissions(perm='modify')
+  write_perms = doc.list_permissions(perm='write')
   return {
       'id': doc.id,
       'contentType': doc.content_type.name,
@@ -173,9 +173,9 @@ def massage_doc_for_json(doc, user):
           'users': [{'id': perm_user.id, 'username': perm_user.username} for perm_user in read_perms.users.all()],
           'groups': [{'id': perm_group.id, 'name': perm_group.name} for perm_group in read_perms.groups.all()]
         },
-        'modify': {
-          'users': [{'id': perm_user.id, 'username': perm_user.username} for perm_user in modify_perms.users.all()],
-          'groups': [{'id': perm_group.id, 'name': perm_group.name} for perm_group in modify_perms.groups.all()]
+        'write': {
+          'users': [{'id': perm_user.id, 'username': perm_user.username} for perm_user in write_perms.users.all()],
+          'groups': [{'id': perm_group.id, 'name': perm_group.name} for perm_group in write_perms.groups.all()]
         }
       },
       'owner': doc.owner.username,

+ 8 - 8
desktop/core/src/desktop/api_tests.py

@@ -208,7 +208,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': []
         }
@@ -232,7 +232,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': []
         }
@@ -260,7 +260,7 @@ class TestDocModelPermissions():
             default_group.id
           ]
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': []
         }
@@ -284,7 +284,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': []
         }
@@ -308,7 +308,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [
             self.user_not_me.id
           ],
@@ -334,7 +334,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': []
         }
@@ -358,7 +358,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': [
             default_group.id
@@ -384,7 +384,7 @@ class TestDocModelPermissions():
           ],
           'group_ids': []
         },
-        'modify': {
+        'write': {
           'user_ids': [],
           'group_ids': []
         }

+ 13 - 17
desktop/core/src/desktop/models.py

@@ -360,11 +360,11 @@ class Document(models.Model):
 
   def is_editable(self, user):
     """Deprecated by can_read"""
-    return self.can_modify(user)
+    return self.can_write(user)
 
   def can_edit_or_exception(self, user, exception_class=PopupException):
-    """Deprecated by can_modify_or_exception"""
-    return self.can_modify_or_exception(user, exception_class)
+    """Deprecated by can_write_or_exception"""
+    return self.can_write_or_exception(user, exception_class)
 
   def add_tag(self, tag):
     self.tags.add(tag)
@@ -398,8 +398,8 @@ class Document(models.Model):
   def can_read(self, user):
     return user.is_superuser or self.owner == user or Document.objects.get_docs(user).filter(id=self.id).exists()
 
-  def can_modify(self, user):
-    return user.is_superuser or self.owner == user or user in self.list_permissions('modify').users.all()
+  def can_write(self, user):
+    return user.is_superuser or self.owner == user or user in self.list_permissions('write').users.all()
 
   def can_read_or_exception(self, user, exception_class=PopupException):
     if self.can_read(user):
@@ -407,15 +407,11 @@ class Document(models.Model):
     else:
       raise exception_class(_('Only superusers and %s are allowed to read this document.') % user)
 
-  def can_modify_or_exception(self, user, exception_class=PopupException):
-    if self.can_modify(user):
+  def can_write_or_exception(self, user, exception_class=PopupException):
+    if self.can_write(user):
       return True
     else:
-      raise exception_class(_('Only superusers and %s are allowed to modify this document.') % user)
-
-  def can_write_or_exception(self, user, exception_class=PopupException):
-    """ Deprecated by can_modify_or_exception """
-    return self.can_modify_or_exception(user, exception_class)
+      raise exception_class(_('Only superusers and %s are allowed to write this document.') % user)
 
   def copy(self, name=None, owner=None):
     copy_doc = self
@@ -495,7 +491,7 @@ class Document(models.Model):
 class DocumentPermissionManager(models.Manager):
 
   def _check_perm(self, name):
-    perms = (DocumentPermission.READ_PERM, DocumentPermission.MODIFY_PERM)
+    perms = (DocumentPermission.READ_PERM, DocumentPermission.WRITE_PERM)
     if name not in perms:
       perms_string = ' and '.join(', '.join(perms).rsplit(', ', 1))
       raise PopupException(_('Only %s permissions are supported, not %s.') % (perms_string, name))
@@ -506,8 +502,8 @@ class DocumentPermissionManager(models.Manager):
     
     self._check_perm(name)
 
-    if name == DocumentPermission.MODIFY_PERM:
-      perm, created = DocumentPermission.objects.get_or_create(doc=document, perms=DocumentPermission.MODIFY_PERM)
+    if name == DocumentPermission.WRITE_PERM:
+      perm, created = DocumentPermission.objects.get_or_create(doc=document, perms=DocumentPermission.WRITE_PERM)
     else:
       perm, created = DocumentPermission.objects.get_or_create(doc=document, perms=DocumentPermission.READ_PERM)
     default_group = get_default_user_group()
@@ -568,7 +564,7 @@ class DocumentPermissionManager(models.Manager):
 
 class DocumentPermission(models.Model):
   READ_PERM = 'read'
-  MODIFY_PERM = 'modify'
+  WRITE_PERM = 'write'
 
   doc = models.ForeignKey(Document)
 
@@ -577,7 +573,7 @@ class DocumentPermission(models.Model):
   # @TODO(Abe): Rename to "perm"
   perms = models.TextField(default=READ_PERM, choices=(
     (READ_PERM, 'read'),
-    (MODIFY_PERM, 'modify'),
+    (WRITE_PERM, 'write'),
   ))
 
 

+ 17 - 17
desktop/core/src/desktop/templates/home.mako

@@ -352,12 +352,12 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
 
         <div class="span6">
           <h4 class="muted" style="margin-top:0px">${_('Read and Modify')}</h4>
-          <div data-bind="visible: (selectedDoc().perms.modify.users.length == 0 && selectedDoc().perms.modify.groups.length == 0)">${_('The document is not shared for read and modify.')}</div>
-          <ul class="unstyled airy" data-bind="foreach: selectedDoc().perms.modify.users">
-            <li><span class="badge badge-info badge-left"><i class="fa fa-user"></i> <span data-bind="text: prettifyUsername(id)"></span></span><span class="badge badge-right trash-share" data-bind="click: removeUserModifyShare"> <i class="fa fa-times"></i></li>
+          <div data-bind="visible: (selectedDoc().perms.write.users.length == 0 && selectedDoc().perms.write.groups.length == 0)">${_('The document is not shared for read and modify.')}</div>
+          <ul class="unstyled airy" data-bind="foreach: selectedDoc().perms.write.users">
+            <li><span class="badge badge-info badge-left"><i class="fa fa-user"></i> <span data-bind="text: prettifyUsername(id)"></span></span><span class="badge badge-right trash-share" data-bind="click: removeUserWriteShare"> <i class="fa fa-times"></i></li>
           </ul>
-          <ul class="unstyled airy" data-bind="foreach: selectedDoc().perms.modify.groups">
-            <li><span class="badge badge-info badge-left"><i class="fa fa-users"></i> ${ _('Group') } &quot;<span data-bind="text: name"></span>&quot;</span><span class="badge badge-right trash-share" data-bind="click: removeGroupModifyShare"> <i class="fa fa-times"></i></li>
+          <ul class="unstyled airy" data-bind="foreach: selectedDoc().perms.write.groups">
+            <li><span class="badge badge-info badge-left"><i class="fa fa-users"></i> ${ _('Group') } &quot;<span data-bind="text: name"></span>&quot;</span><span class="badge badge-right trash-share" data-bind="click: removeGroupWriteShare"> <i class="fa fa-times"></i></li>
           </ul>
         </div>
 
@@ -373,7 +373,7 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
             </a>
             <ul class="dropdown-menu">
               <li><a data-bind="click: changeDocumentSharePerm.bind(null, 'read')" href="javascript:void(0)">${ _('Read') }</a></li>
-              <li><a data-bind="click: changeDocumentSharePerm.bind(null, 'modify')" href="javascript:void(0)">${ _('Read and Modify') }</a></li>
+              <li><a data-bind="click: changeDocumentSharePerm.bind(null, 'write')" href="javascript:void(0)">${ _('Read and Modify') }</a></li>
             </ul>
           </div>
         </div>
@@ -593,10 +593,10 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
     shareDocFinal();
   }
 
-  function removeUserModifyShare(user) {
-    $(viewModel.selectedDoc().perms.modify.users).each(function (cnt, item) {
+  function removeUserWriteShare(user) {
+    $(viewModel.selectedDoc().perms.write.users).each(function (cnt, item) {
       if (item.id == user.id) {
-        viewModel.selectedDoc().perms.modify.users.splice(cnt, 1);
+        viewModel.selectedDoc().perms.write.users.splice(cnt, 1);
       }
     });
     viewModel.selectedDoc.valueHasMutated();
@@ -613,10 +613,10 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
     shareDocFinal();
   }
 
-  function removeGroupModifyShare(group) {
-    $(viewModel.selectedDoc().perms.modify.groups).each(function (cnt, item) {
+  function removeGroupWriteShare(group) {
+    $(viewModel.selectedDoc().perms.write.groups).each(function (cnt, item) {
       if (item.id == group.id) {
-        viewModel.selectedDoc().perms.modify.groups.splice(cnt, 1);
+        viewModel.selectedDoc().perms.write.groups.splice(cnt, 1);
       }
     });
     viewModel.selectedDoc.valueHasMutated();
@@ -633,7 +633,7 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
         user_ids: [],
         group_ids: []
       },
-      modify: {
+      write: {
         user_ids: [],
         group_ids: []
       }
@@ -647,12 +647,12 @@ ${ commonheader(_('Welcome Home'), "home", user) | n,unicode }
       _postPerms.read.group_ids.push(item.id);
     });
 
-    $(viewModel.selectedDoc().perms.modify.users).each(function (cnt, item) {
-      _postPerms.modify.user_ids.push(item.id);
+    $(viewModel.selectedDoc().perms.write.users).each(function (cnt, item) {
+      _postPerms.write.user_ids.push(item.id);
     });
 
-    $(viewModel.selectedDoc().perms.modify.groups).each(function (cnt, item) {
-      _postPerms.modify.group_ids.push(item.id);
+    $(viewModel.selectedDoc().perms.write.groups).each(function (cnt, item) {
+      _postPerms.write.group_ids.push(item.id);
     });
 
     $.post("/desktop/api/doc/update_permissions", {

+ 6 - 2
desktop/core/static/js/home.vm.js

@@ -30,7 +30,7 @@ function HomeViewModel(json_tags, json_docs) {
         users: [],
         groups: []
       },
-      modify: {
+      write: {
         users: [],
         groups: []
       }
@@ -39,7 +39,11 @@ function HomeViewModel(json_tags, json_docs) {
 
   self.selectedPerm = ko.observable('read');
   self.selectedPermLabel = ko.computed(function() {
-    return self.selectedPerm().replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
+    if (self.selectedPerm() == 'write') {
+      return 'Modify';
+    } else {
+      return 'Read';
+    }
   });
 
   self.selectedTag = ko.observable({});