Scott Seago
2009-May-11 18:49 UTC
[Ovirt-devel] [PATCH server] converted the task controller to use the service layer.
Signed-off-by: Scott Seago <sseago at redhat.com> --- src/app/controllers/task_controller.rb | 15 ++------- src/app/models/storage_volume.rb | 4 ++ .../task_service.rb} | 35 +++++++++++--------- 3 files changed, 26 insertions(+), 28 deletions(-) copy src/app/{controllers/task_controller.rb => services/task_service.rb} (57%) diff --git a/src/app/controllers/task_controller.rb b/src/app/controllers/task_controller.rb index 9756f79..ba31e0c 100644 --- a/src/app/controllers/task_controller.rb +++ b/src/app/controllers/task_controller.rb @@ -18,19 +18,10 @@ # also available at http://www.gnu.org/copyleft/gpl.html. class TaskController < ApplicationController - def show - @task = Task.find(params[:id]) - if @task[:type] == VmTask.name - set_perms(@task.vm.vm_resource_pool) - elsif @task[:type] == StorageTask.name - set_perms(@task.storage_pool.hardware_pool) - elsif @task[:type] == StorageVolumeTask.name - set_perms(@task.storage_volume.storage_pool.hardware_pool) - elsif @task[:type] == HostTask.name - set_perms(@task.host.hardware_pool) - end - authorize_view + include TaskService + def show + svc_show(params[:id] end end diff --git a/src/app/models/storage_volume.rb b/src/app/models/storage_volume.rb index 59d166e..45cd5c6 100644 --- a/src/app/models/storage_volume.rb +++ b/src/app/models/storage_volume.rb @@ -166,6 +166,10 @@ class StorageVolume < ActiveRecord::Base return_hash end + def permission_obj + storage_pool.hardware_pool + end + def movable? if vms.size > 0 or (not lvm_storage_pool.nil? and not lvm_storage_pool.movable?) diff --git a/src/app/controllers/task_controller.rb b/src/app/services/task_service.rb similarity index 57% copy from src/app/controllers/task_controller.rb copy to src/app/services/task_service.rb index 9756f79..9e5b5b4 100644 --- a/src/app/controllers/task_controller.rb +++ b/src/app/services/task_service.rb @@ -1,6 +1,6 @@ -# -# Copyright (C) 2008 Red Hat, Inc. -# Written by Scott Seago <sseago at redhat.com> +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago <sseago at redhat.com>, # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,21 +16,24 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. A copy of the GNU General Public License is # also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around tasks +module TaskService + include ApplicationService -class TaskController < ApplicationController - def show - @task = Task.find(params[:id]) - if @task[:type] == VmTask.name - set_perms(@task.vm.vm_resource_pool) - elsif @task[:type] == StorageTask.name - set_perms(@task.storage_pool.hardware_pool) - elsif @task[:type] == StorageVolumeTask.name - set_perms(@task.storage_volume.storage_pool.hardware_pool) - elsif @task[:type] == HostTask.name - set_perms(@task.host.hardware_pool) - end - authorize_view + # Load the Task with +id+ for viewing + # + # === Instance variables + # [<tt>@task</tt>] stores the Task with +id+ + # === Required permissions + # [<tt>Privilege::VIEW</tt>] on task target's Pool + def svc_show(id) + lookup(id,Privilege::VIEW) + end + private + def lookup(id, priv) + @task = Task.find(id) + authorized!(priv, at task.task_target.permission_obj) end end -- 1.6.0.6