Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 多租户Rails应用程序的管理_Ruby On Rails 3_Multi Tenant - Fatal编程技术网

Ruby on rails 3 多租户Rails应用程序的管理

Ruby on rails 3 多租户Rails应用程序的管理,ruby-on-rails-3,multi-tenant,Ruby On Rails 3,Multi Tenant,我们有一个multi-tentant rails应用程序,它非常紧密地保留了Ryan Bates解释/教授的“从头开始”方法 从头开始的身份验证 从零开始的多租户 我们有一个帐户模型,它具有子域属性,并使用作用域来分隔数据 #ApplicationController around_filter :scope_current_account private def current_account if request.subdomain.present? &&

我们有一个multi-tentant rails应用程序,它非常紧密地保留了Ryan Bates解释/教授的“从头开始”方法

从头开始的身份验证

从零开始的多租户

我们有一个帐户模型,它具有子域属性,并使用作用域来分隔数据

#ApplicationController
around_filter :scope_current_account  

private

  def current_account
    if request.subdomain.present? && request.subdomain != 'www' && request.subdomain != 'ndt-staging'
      @account ||= Account.find_by_subdomain!(request.subdomain)
    end
  end
  helper_method :current_account

  def scope_current_account
    if request.subdomain.present? && request.subdomain != 'www' && request.subdomain != 'ndt-staging'
      Account.current_id = current_account.id   
    end
    yield
  ensure
    Account.current_id = nil
  end
模型:

#Account.rb
has_many :users, :inverse_of => :account, :dependent => :destroy

#User.rb
belongs_to :account, :inverse_of => :users
default_scope { where(account_id: Account.current_id) }
我的问题是:在应用程序范围内管理用户的最佳方法是什么。。意思是User.scoped和User.unscoped

首先想到的是向用户模型添加admin_password属性。使用环境变量设置密码,并在创建用户/帐户时将管理员密码值添加到隐藏字段中

(account new操作还会生成用户并创建用户帐户)

我看到这种方法的最大问题是身份验证。我需要重新写入内容,以便如果管理员密码正确,则不会检查正常密码属性。如果管理员密码不正确,将使用password属性

作为旁注,我已经研究过像acts_As_tenant and Desive这样的插件,但我更愿意自己构建这些部分

我可能在这里走错了路,这就是为什么我要求推荐解决方案/想法。提前感谢您的支持:)


我使用cancan gem解决了这个问题,并在帐户创建操作中创建了一个管理员用户。

我使用cancan gem解决了这个问题,并在帐户创建操作中创建了一个管理员用户

#AccountsController
def new
  @account = Account.new
  @account.users.build(params[:user])
end
#SessionsController
def create
  user = User.find_by_email(params[:email].downcase)
  if user && user.authenticate(params[:password])
    sign_in user
    redirect_to welcome_path
  else
    flash.now[:error] = 'Invalid email/password combination' # Not quite right!
    render 'new'
  end
end