@@ -439,7 +439,8 @@ class CbrainTask::<%= name %> < <%= (descriptor['custom'] || {})['cbrain:inherit
439439 begin # Check that the user has access to all of the files in the cbcsv
440440 fs = f.userfiles_accessible_by_user!(self.user,nil,nil,file_access)
441441 for i in f.ordered_raw_ids.select{ |r| (! r.nil?) && (r.to_s != '0') }
442- accessible = ! ( Userfile.find_accessible_by_user( i, self.user, :access_requested => file_access ) rescue nil ).nil?
442+ accessible = ! ( Userfile.find_accessible_by_user( i, self.user, :access_requested => file_access ) rescue nil ).nil?
443+ accessible |= ! ( CbrainFileList.find_accessible_by_user( i, self.user, :access_requested => :read ) rescue nil ).nil?
443444 params_errors.add( id, msg1.(i) ) unless accessible
444445 errFlag = false unless accessible
445446 end
@@ -463,14 +464,17 @@ class CbrainTask::<%= name %> < <%= (descriptor['custom'] || {})['cbrain:inherit
463464 # Get cbcsvs (note: we get files that end with cbcsv, but may not be of that class; the user is warned when this occurs, i.e. after_form fails)
464465 files = self.params[:interface_userfile_ids].map do |f|
465466 begin
466- Userfile.find_accessible_by_user( f, self.user, :access_requested => file_access )
467+ # for file list read access is enough
468+ file = CbrainFileList.find_accessible_by_user( f, self.user, :access_requested => :read ) rescue nil
469+ # for individual files or collections, write access is needed if tool may mutate inputs
470+ file ||= Userfile.find_accessible_by_user( f, self.user, :access_requested => file_access )
467471 rescue => e
468472 params_errors.add(<%= ":'#{ single_file [ 'id' ] } '" %> , "encountered an error trying to find file #{f}. Ensure the file exists and you can access it.")
469473 return ""
470474 end
471475 end
472476 cbcsvs = files.select(&:presence).map do |f|
473- Userfile.find_accessible_by_user( f, self.user, :access_requested => file_access )
477+ Userfile.find_accessible_by_user( f, self.user, :access_requested => :read )
474478 end.select do |f|
475479 f.is_a?(CbrainFileList) || (f.suggested_file_type || Object) < = CbrainFileList
476480 end
@@ -531,7 +535,7 @@ class CbrainTask::<%= name %> < <%= (descriptor['custom'] || {})['cbrain:inherit
531535 <%= "file_lists = [%s]" % file_lists . map { |f | ":'#{ f [ 'id' ] } '" } . join ( ', ' ) %>
532536 return [] if files.nil? || files.length == 0
533537 files.select { |f| self.params[f].present? && ! file_lists.include?(f) } # Prevent problems with file-type inputs with list=true
534- .map { |f| [f, Userfile.find_accessible_by_user(self.params[f], self.user, :access_requested => file_access )] }
538+ .map { |f| [f, Userfile.find_accessible_by_user(self.params[f], self.user, :access_requested => :read )] }
535539 .select { |f| f[1].is_a?(CbrainFileList) || (f[1].suggested_file_type || Object) < = CbrainFileList }
536540 end
537541
@@ -567,7 +571,8 @@ class CbrainTask::<%= name %> < <%= (descriptor['custom'] || {})['cbrain:inherit
567571 tsk
568572 end
569573 # Expand cbcsvs and generate tasks from them
570- f = Userfile.find_accessible_by_user( id, self.user, :access_requested => file_access )
574+ f = CbrainFileList.find_accessible_by_user( id, self.user, :access_requested => :read ) rescue nil
575+ f ||= Userfile.find_accessible_by_user( id, self.user, :access_requested => file_access )
571576 if f.is_a?( CbrainFileList )
572577 ufiles = f.userfiles_accessible_by_user!( self.user, nil, nil, file_access )
573578 # Skip files that are purposefully nil (e.g. given id 0 by the user)
@@ -724,7 +729,8 @@ class CbrainTask::<%= name %> < <%= (descriptor['custom'] || {})['cbrain:inherit
724729 next value
725730 end
726731
727- unless (file = Userfile.find_accessible_by_user(value, self.user, :access_requested => file_access) rescue nil)
732+ unless (file = Userfile.find_accessible_by_user(value, self.user, :access_requested => file_access) rescue nil ||
733+ CbrainFileList.find_accessible_by_user(value, self.user, :access_requested => :read) rescue nil )
728734 params_errors.add(name, ": cannot find userfile (ID #{value})")
729735 next value
730736 end
0 commit comments