Возможно ли иметь в одном Rails приложения с cookie-сессиями пользователей, которые являются либо доменом, либо поддоменом? - PullRequest
0 голосов
/ 07 января 2011

Я хочу, чтобы в приложении с несколькими поддоменами входили администраторы и простые пользователи.Администраторы должны иметь доступ ко всем поддоменам (то есть их сеанс должен храниться в файле cookie, который доступен всем поддоменам).Пользователи должны иметь доступ только к поддомену, в который они вошли.

, например:

admin"администратор" входит в систему либо по URL-адресу домена (mydomain.com) или на любом поддомене (например, abc.mydomain.com) и остается зарегистрированным во всех поддоменах.Поэтому он («администратор») может получить доступ к efg.mydomain.com, abc.mydomain.com, mydomain.com и т. Д. И т. Д.

user «simpleuser» выполняет вход на abc.mydomain..com.Он ("simpleuser") может получить доступ только к этому поддомену (т. Е. Cookie относится только к поддомену abc.mydomain.com)

Я знаю, что можно выбрать связывание с cookie либо с поддоменом, либо с доменом, но я хотел бы смешать это поведение в одном приложении.Кто-нибудь знает о подходе?

Это для Rails 3

Я бы не хотел ограничивать доступ к поддомену через мое приложение (т.е. через канкан или декларативную авторизацию).В идеале доступ должен быть заблокирован на уровне поддоменов через cookie.Я считаю, что это более безопасный подход, поскольку он избавляет от необходимости устанавливать еще одну часть программного обеспечения для контроля доступа к сайту.

1 Ответ

0 голосов
/ 07 января 2011

Вы хотите, чтобы cookie действовал во всех поддоменах, но используйте авторизацию для ограничения доступа пользователей к поддомену.

Здесь может работать что-то вроде cancan - где, если вы являетесь администратором, вы можете получить доступ ко всему, но пользователь может получить доступ, только если вы являетесь этим пользователем.

в вашем контроллере приложения

before_filter :authorize_me

def authorize_me
  @user = User.find_by_subdomain(request.subdomain)
  authorize! :administer, @user
end

В умении.рб Способность класса включить CanCan :: Ability

  def initialize(user)
    user ||= User.new

    can :manage, :all if user.admin?

    can :administer, User do |new_user|
      new_user.id == user.id
    end
  end
end
...