gpt4 book ai didi

ruby-on-rails - 如何创建管理子域来管理 Rails 中的子域

转载 作者:行者123 更新时间:2023-12-02 15:38:56 26 4
gpt4 key购买 nike

我正在使用 AuthLogic 和 dhh 在 this blog post 中介绍的子域方法,一切都很好,并且符合预期。我想要弄清楚的是如何创建一个像“admin”或“host”这样的子域,该子域将让用户通过 AuthLogic 进行身份验证(这可能很简单,无需提及)来管理子域。所以基本上,所有子域都会正常运行,除了 admin.site.com 之外,它将使用自己的 Controller 和布局..

dhh 建议只是抛出一个异常来重定向,但我不确定它会去哪里,对我来说似乎并不那么简单,有什么想法吗?

编辑我认为我使用 AuthLogic 的事实在这里很重要,因为一旦经过身份验证的 AuthLogic 将用户发送到/account,子域逻辑不会将用户转发到任何地方 - 所以我的问题可能与如果用户是root用户,登录到admin子域..

这是我们迄今为止实现的代码

Company Model

class Company < ActiveRecord::Base
has_many :users
has_many :brands, :dependent => :destroy

validates_presence_of :name, :phone, :subdomain
validates_format_of :subdomain, :with => /^[A-Za-z0-9-]+$/, :message => 'The subdomain can only contain alphanumeric characters and dashes.', :allow_blank => true
validates_uniqueness_of :subdomain, :case_sensitive => false
validates_exclusion_of :format, :in => %w( support blog billing help api www host admin manage ryan jeff allie), :message => "Subdomain {{value}} is not allowed."
before_validation :downcase_subdomain

protected
def downcase_subdomain
self.subdomain.downcase! if attribute_present?("subdomain")
end
end

SubdomainCompanies Module

module SubdomainCompanies
def self.included( controller )
controller.helper_method(:company_domain, :company_subdomain, :company_url, :company_account, :default_company_subdomain, :default_company_url)
end

protected

# TODO: need to handle www as well
def default_company_subdomain
''
end

def company_url( company_subdomain = default_company_subdomain, use_ssl = request.ssl? )
http_protocol(use_ssl) + company_host(company_subdomain)
end

def company_host( subdomain )
company_host = ''
company_host << subdomain + '.'
company_host << company_domain
end

def company_domain
company_domain = ''
company_domain << request.domain + request.port_string
end

def company_subdomain
request.subdomains.first || ''
end

def default_company_url( use_ssl = request.ssl? )
http_protocol(use_ssl) + company_domain
end

def current_company
Company.find_by_subdomain(company_subdomain)
end

def http_protocol( use_ssl = request.ssl? )
(use_ssl ? "https://" : "http://")
end
end

Application Controller

class ApplicationController < ActionController::Base
include SubdomainCompanies

rescue_from 'Acl9::AccessDenied', :with => :access_denied

helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper_method :current_user_session, :current_user, :current_company_name
filter_parameter_logging :password, :password_confirmation
before_filter :check_company_status

protected

def public_site?
company_subdomain == default_company_subdomain
end

def current_layout_name
public_site? ? 'public' : 'login'
end

def check_company_status
unless company_subdomain == default_company_subdomain
# TODO: this is where we could check to see if the account is active as well (paid, etc...)
redirect_to default_company_url if current_company.nil?
end
end
end

最佳答案

查看subdomain-fu它允许您根据子域路由到不同的 Controller 和操作。我做了一个Railscasts Episode就这个主题而言。

它可能看起来像这样。

# in routes.rb
map.manage_companies '', :controller => 'companies', :action => 'index', :conditions => { :subdomain => "admin" }

这需要在路由列表中位于足够高的位置,因此在它之前没有其他内容匹配。

关于ruby-on-rails - 如何创建管理子域来管理 Rails 中的子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com