You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/controllers/cooperative/base_controller.rb

59 lines
1.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

class Cooperative::BaseController < ApplicationController
include Base::PaginateHelper
include Cooperative::RenderHelper
include Base::ErrorRescueHandler
layout 'cooperative'
skip_before_action :verify_authenticity_token
before_action :laboratory_exist!, :require_login, :require_cooperative_manager!
after_action :rebind_event_if_ajax_render_partial
helper_method :current_laboratory, :current_setting_or_default
private
def current_laboratory
@_current_laboratory ||= Laboratory.find_by_subdomain(request.subdomain)
# @_current_laboratory ||= Laboratory.find 1
end
def current_setting_or_default(name)
current_laboratory.public_send(name) || default_setting.public_send(name)
end
def laboratory_exist!
return if current_laboratory.present?
redirect_to '/403'
end
def require_login
return if User.current.logged?
redirect_to "/login?back_url=#{CGI::escape(request.fullpath)}"
end
def require_cooperative_manager!
return if current_user.blank? || !current_user.logged?
return if current_user.admin_or_business?
return if current_laboratory.laboratory_users.exists?(user_id: current_user.id)
render_forbidden
end
# 触发after ajax render partial hooks执行一些因为局部刷新后失效的绑定事件
def rebind_event_if_ajax_render_partial
return if request.format.symbol != :js
return if response.content_type != 'text/javascript'
path = Rails.root.join('app/views/cooperative/shared/after_render_js_hook.js.erb')
return unless File.exists?(path)
append_js = ERB.new(File.open(path).read).result
response.body += append_js
end
end