浏览代码

HUE-6863 [jb] Schedule Kill buttons are enabled even when the user is not allowed

Romain Rigaux 8 年之前
父节点
当前提交
32c8f19d61

+ 3 - 1
apps/jobbrowser/src/jobbrowser/apis/bundle_api.py

@@ -59,7 +59,8 @@ class BundleApi(Api):
         'progress': app['progress'],
         'queue': app['group'],
         'duration': app['durationInMillis'],
-        'submitted': app['kickoffTimeInMillis'] * 1000
+        'submitted': app['kickoffTimeInMillis'] * 1000,
+        'canWrite': app['canEdit']
       } for app in massaged_oozie_jobs_for_json(jobs.jobs, self.user)['jobs']],
       'total': jobs.total
     }
@@ -79,6 +80,7 @@ class BundleApi(Api):
         'type': 'bundle',
         'user': bundle['user'],
         'submitted': bundle['submitted'],
+        'canWrite': bundle['canEdit'],
         'properties': {}
     }
     common['properties']['actions'] = bundle['actions']

+ 4 - 2
apps/jobbrowser/src/jobbrowser/apis/schedule_api.py

@@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__)
 
 try:
   from oozie.conf import OOZIE_JOBS_COUNT
-  from oozie.views.dashboard import list_oozie_coordinator, get_oozie_job_log, massaged_oozie_jobs_for_json
+  from oozie.views.dashboard import list_oozie_coordinator, get_oozie_job_log, massaged_oozie_jobs_for_json, has_job_edition_permission
 except Exception, e:
   LOG.exception('Some application are not enabled: %s' % e)
 
@@ -58,7 +58,8 @@ class ScheduleApi(Api):
         'progress': app['progress'],
         'queue': app['group'],
         'duration': app['durationInMillis'],
-        'submitted': app['startTimeInMillis'] * 1000
+        'submitted': app['startTimeInMillis'] * 1000,
+        'canWrite': app['canEdit']
       } for app in massaged_oozie_jobs_for_json(jobs.jobs, self.user)['jobs']],
       'total': jobs.total
     }
@@ -80,6 +81,7 @@ class ScheduleApi(Api):
         'type': 'schedule',
         'submitted': format_time(coordinator.startTime),
         'user': coordinator.user,
+        'canWrite': has_job_edition_permission(coordinator, self.user),
     }
     common['properties'] = json.loads(response.content)
     common['properties']['tasks'] = common['properties']['actions']

+ 6 - 3
apps/jobbrowser/src/jobbrowser/apis/workflow_api.py

@@ -30,7 +30,8 @@ LOG = logging.getLogger(__name__)
 try:
   from oozie.forms import ParameterForm
   from oozie.conf import OOZIE_JOBS_COUNT, ENABLE_OOZIE_BACKEND_FILTERING
-  from oozie.views.dashboard import get_oozie_job_log, list_oozie_workflow, manage_oozie_jobs, bulk_manage_oozie_jobs, has_dashboard_jobs_access, massaged_oozie_jobs_for_json
+  from oozie.views.dashboard import get_oozie_job_log, list_oozie_workflow, manage_oozie_jobs, bulk_manage_oozie_jobs, has_dashboard_jobs_access, massaged_oozie_jobs_for_json, \
+      has_job_edition_permission
 except Exception, e:
   LOG.exception('Some applications are not enabled for Job Browser v2: %s' % e)
 
@@ -56,7 +57,8 @@ class WorkflowApi(Api):
         'progress': app['progress'],
         'queue': app['group'],
         'duration': app['durationInMillis'],
-        'submitted': app['startTimeInMillis'] * 1000
+        'submitted': app['startTimeInMillis'] * 1000,
+        'canWrite': app['canEdit']
       } for app in massaged_oozie_jobs_for_json(wf_list.jobs, self.user)['jobs']],
       'total': wf_list.total
     }
@@ -78,7 +80,8 @@ class WorkflowApi(Api):
         'type': 'workflow',
         'user': workflow.user,
         'duration': workflow.durationTime,
-        'submitted': workflow.submissionTime * 1000
+        'submitted': workflow.submissionTime * 1000,
+        'canWrite': has_job_edition_permission(workflow, self.user),
     }
 
     request = MockDjangoRequest(self.user)

+ 6 - 5
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -1496,6 +1496,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
       self.cluster = ko.observableDefault(job.cluster);
       self.duration = ko.observableDefault(job.duration);
       self.submitted = ko.observableDefault(job.submitted);
+      self.canWrite = ko.observableDefault(job.canWrite == true);
 
       self.logs = ko.observable('');
 
@@ -1561,35 +1562,35 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
         return ['MAPREDUCE', 'SPARK', 'workflow', 'schedule', 'bundle'].indexOf(self.type()) != -1;
       });
       self.killEnabled = ko.pureComputed(function() {
-        return self.hasKill() && (self.apiStatus() == 'RUNNING' || self.apiStatus() == 'PAUSED');
+        return self.hasKill() && self.canWrite() && (self.apiStatus() == 'RUNNING' || self.apiStatus() == 'PAUSED');
       });
 
       self.hasResume = ko.pureComputed(function() {
         return ['workflow', 'schedule', 'bundle'].indexOf(self.type()) != -1;
       });
       self.resumeEnabled = ko.pureComputed(function() {
-        return self.hasResume() && self.apiStatus() == 'PAUSED';
+        return self.hasResume() && self.canWrite() && self.apiStatus() == 'PAUSED';
       });
 
       self.hasRerun = ko.pureComputed(function() {
         return ['workflow', 'schedule-task'].indexOf(self.type()) != -1;
       });
       self.rerunEnabled = ko.pureComputed(function() {
-        return self.hasRerun() && !self.isRunning();
+        return self.hasRerun() && self.canWrite() && ! self.isRunning();
       });
 
       self.hasPause = ko.pureComputed(function() {
         return ['workflow', 'schedule', 'bundle'].indexOf(self.type()) != -1;
       });
       self.pauseEnabled = ko.pureComputed(function() {
-        return self.hasPause() && self.apiStatus() == 'RUNNING';
+        return self.hasPause() && self.canWrite() && self.apiStatus() == 'RUNNING';
       });
 
       self.hasIgnore = ko.pureComputed(function() {
         return ['schedule-task'].indexOf(self.type()) != -1;
       });
       self.ignoreEnabled = ko.pureComputed(function() {
-        return self.hasIgnore() && !self.isRunning();
+        return self.hasIgnore() && self.canWrite() && ! self.isRunning();
       });
 
       self.loadingJob = ko.observable(false);

+ 1 - 0
apps/oozie/src/oozie/views/dashboard.py

@@ -527,6 +527,7 @@ def list_oozie_bundle(request, job_id):
       'actions': massaged_bundle_actions_for_json(oozie_bundle),
       'submitted': format_time(oozie_bundle.kickoffTime),
       'doc_url': bundle.get_absolute_url() if bundle else '',
+      'canEdit': has_job_edition_permission(oozie_bundle, request.user),
     }
     return HttpResponse(json.dumps(return_obj).replace('\\\\', '\\'), content_type="application/json")