Browse Source

[pig] Enforce write permissions on the shared scripts

Display an error message and hide the save button if no write permission.
Romain Rigaux 11 năm trước cách đây
mục cha
commit
4df787b

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

@@ -87,8 +87,8 @@ 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_read_or_exception(user)
-  except PigScript.DoesNotExist:
+    pig_script.doc.get().can_write_or_exception(user)
+  except PigScript.DoesNotExist, ex:
     pig_script = PigScript.objects.create(owner=user, is_design=is_design)
     Doc.objects.link(pig_script, owner=pig_script.owner, name=name)
     if not is_design:
@@ -122,6 +122,7 @@ def get_scripts(user, is_design=None):
       'resources': data['resources'],
       'hadoopProperties': data.get('hadoopProperties', []),
       'isDesign': script.is_design,
+      '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">
+            <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>

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

@@ -37,6 +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_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);
@@ -205,7 +206,8 @@ var PigViewModel = function (props) {
     parameters: self.LABELS.NEW_SCRIPT_PARAMETERS,
     resources: self.LABELS.NEW_SCRIPT_RESOURCES,
     hadoopProperties: self.LABELS.NEW_SCRIPT_HADOOP_PROPERTIES,
-    parentModel: self
+    parentModel: self,
+    can_write: true
   };
 
   self.currentScript = ko.observable(new PigScript(_defaultScript));
@@ -502,7 +504,9 @@ var PigViewModel = function (props) {
           self.currentScript().id(data.id);
           $(document).trigger("saved");
           self.updateScripts();
-        }, "json");
+        }, "json").fail( function(xhr, textStatus, errorThrown) {
+          $(document).trigger("error", xhr.responseText);
+        });
   }
 
   function callRun(script) {