orbit4-5/lib/orbit_core_lib.rb

111 lines
3.3 KiB
Ruby

module OrbitCoreLib
module Preview
def self.included(base)
base.class_eval ("
def to_preview
raise 'Developer,please override to_preview method'
end
")
end
end
module ObjectDisable
def self.included(base)
base.instance_eval("field :disable,type: Boolean,:default => false")
base.instance_eval("scope :all, ->{ where(:disable.in => [false, nil, '']) }")
base.instance_eval("scope :admin_manager_all, ->{ find(:all) }")
base.define_singleton_method :find do |*args|
if args ==[:all]
unscoped
else
res = unscoped.find(args)
res.count == 1 ? res[0] : res
end
end
base.define_singleton_method :first do |*args|
all.first
end
base.define_singleton_method :last do |*args|
all.last
end
end
end
module Authorize
def self.included(base)
base.class_eval do
before_filter :can_use
send :include, InstanceMethods
end
end
module InstanceMethods
protected
def can_use
@app_title ||= controller_path.split('/')[1].singularize rescue nil
@module_app ||= ModuleApp.find_by(key: @app_title) rescue nil
@module_app = ModuleApp.find(params[:module_app_id]) if @module_app.key == "category" || "tag" rescue nil
if @module_app.nil?
o = OrbitApp::Module::Registration.find_by_url(controller_path)
@app_title = o.key rescue nil
@module_app ||= ModuleApp.find_by(key: @app_title) rescue nil
end
@module_authorized_users ||= Authorization.module_authorized_users(@module_app.id).pluck(:user_id) rescue nil
authenticate_user
if !@module_app.nil?
check_user_can_use
else
if !current_user.is_admin?
render "public/401"
end
end
end
def check_user_can_use
permissions = {}
@module_app.get_registration.get_side_bar.get_context_links.each do |link|
l = (Rails.application.routes.url_helpers.send(link.path) rescue Rails.application.routes.url_helpers.send(link.path, {:module_app_id => @module_app.id}))
if l == request.path.sub("/" + I18n.locale.to_s,"")
permissions["link"] = l
permissions["available_for"] = link.available_for
break
end
end
if !permissions.empty?
if !allow?(permissions["available_for"] || ["admin"])
render "public/401" , layout: "back_end" if !current_user.nil?
end
end
end
def allow?(af)
if !current_user.nil?
status = "users"
if current_user.is_admin?
status = "admin"
elsif current_user.is_manager?(@module_app)
status = "managers"
elsif current_user.is_manager_with_role?(@module_app)
status = "managers"
elsif current_user.is_sub_manager?(@module_app)
status = "sub_managers"
elsif current_user.is_sub_manager_with_role?(@module_app)
status = "sub_managers"
elsif current_user.is_normal_user?
status = "users"
end
return af.include?status
else
return false
end
end
end
end
end