Răsfoiți Sursa

[pig] Enforce write permissions on the shared scripts

Display an error message and hide the save button if no write permission.
Romain Rigaux 11 ani în urmă
părinte
comite
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) {