فهرست منبع

[pig] Enforce write permissions on the shared scripts

Display an error message and hide the save button if no write permission.
Romain Rigaux 11 سال پیش
والد
کامیت
4df787b
3فایلهای تغییر یافته به همراه10 افزوده شده و 5 حذف شده
  1. 3 2
      apps/pig/src/pig/models.py
  2. 1 1
      apps/pig/src/pig/templates/app.mako
  3. 6 2
      apps/pig/static/js/pig.ko.js

+ 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) {