Почему before_filter не работает так, как я ожидаю с restful-аутентификацией? - PullRequest
1 голос
/ 24 декабря 2009

Контроллер моего приложения выглядит так

class ApplicationController < ActionController::Base
  include AuthenticatedSystem
  helper :all # include all helpers, all the time
  protect_from_forgery # :secret => 'sup3rs3cr3t'
  filter_parameter_logging :password

  # Here's the interesting bit
  before_filter :login_required, :except => [:index, :show, :new]
end

Теперь у меня есть другой контроллер, который выглядит следующим образом

class CompletelySecretController < ApplicationController

  # the other interesting bit
  before_filter :login_required
  def index
    @secrets = Secret.find(:all)
  end
end

Я все еще вижу все секреты, несмотря на то, что я заявляю, что для всех действий с * 1007 требуется логин

before_filter :login_required

Разве не интуитивно думать, что before_filter в дочернем классе переопределяет before_filter в родительском классе?

1 Ответ

1 голос
/ 24 декабря 2009

before_filter в вашем подклассе не отменяет один и тот же вызов в суперклассе, но вместо этого они накладываются друг на друга. Так работает цепочка фильтров. Если вы хотите пропустить фильтр, добавленный в ApplicationController, вы можете использовать метод skip_before_filter - см. Раздел «Пропуск цепи фильтра» здесь, в документации по фильтрам .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...