77 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
class CommonsController < ApplicationController
 | 
						|
  OBJECT_TYPE = %W[message journals_for_message]
 | 
						|
 | 
						|
  before_action :require_login, :check_auth
 | 
						|
  before_action :validate_object_type
 | 
						|
  before_action :find_object
 | 
						|
  before_action :validate_power
 | 
						|
 | 
						|
  def delete
 | 
						|
    begin
 | 
						|
      @object.destroy!
 | 
						|
    rescue Exception => e
 | 
						|
      uid_logger_error(e.message)
 | 
						|
      tip_exception(e.message)
 | 
						|
      raise ActiveRecord::Rollback
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def hidden
 | 
						|
    action(true)
 | 
						|
  end
 | 
						|
 | 
						|
  def unhidden
 | 
						|
    action(false)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
  def find_object
 | 
						|
    begin
 | 
						|
      @object = params[:object_type].strip.classify.constantize.find params[:object_id]
 | 
						|
    rescue Exception => e
 | 
						|
      uid_logger_error(e.message)
 | 
						|
      tip_exception(e.message)
 | 
						|
      return
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def validate_object_type
 | 
						|
    return normal_status(2, "缺少object_id参数") if params[:object_id].blank?
 | 
						|
    return normal_status(2, "缺少object_type参数") if params[:object_type].blank?
 | 
						|
    return normal_status(2, "object_type参数格式错误") unless OBJECT_TYPE.include? params[:object_type].strip
 | 
						|
  end
 | 
						|
 | 
						|
  def validate_power
 | 
						|
    code =
 | 
						|
      case params[:object_type].strip
 | 
						|
      when 'message'
 | 
						|
        if current_user.course_identity(@object.board.course) >= Course::STUDENT && @object.author != current_user
 | 
						|
          403
 | 
						|
        else
 | 
						|
          200
 | 
						|
        end
 | 
						|
      when 'journals_for_message'
 | 
						|
        course = @object&.jour_type.to_s == "StudentWorksScore" ? @object.jour&.student_work&.homework_common&.course : @object.jour&.course
 | 
						|
        if current_user.course_identity(course)  >= Course::STUDENT && @object.user != current_user
 | 
						|
          403
 | 
						|
        else
 | 
						|
          200
 | 
						|
        end
 | 
						|
      else
 | 
						|
        current_user.admin_or_business? ? 200 : 403
 | 
						|
      end
 | 
						|
    return normal_status(code, "你没有权限操作!") if code == 403
 | 
						|
  end
 | 
						|
 | 
						|
  def action(flag)
 | 
						|
    begin
 | 
						|
      @object.has_attribute?(:is_hidden) ? @object.update_attributes(:is_hidden => flag )
 | 
						|
          : @object.update_attributes(:hidden => flag )
 | 
						|
    rescue Exception => e
 | 
						|
      uid_logger_error(e.message)
 | 
						|
      tip_exception(e.message)
 | 
						|
      raise ActiveRecord::Rollback
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |