authlogic и ajax на месте редактирования с рельсами, а также проблемы маршрутизации - PullRequest
0 голосов
/ 03 октября 2009

Я пытаюсь использовать Authlogic для защиты некоторых полей редактора на моем месте на странице. Я защитил все методы в моем контроллере, но похоже, что in_place_editor вызывает некоторые странные сгенерированные вещи, которые даже не отображаются в моих маршрутах, например, "/ quotes / set_quote_text / 1" Номер один, есть сайт, который рассказывает больше об этих "секретных" маршрутах? Или это то, что добавлено в редактирование, о котором я не знаю? Это просто отчасти нервирует, что даже не отображается при отображении всех маршрутов.

Предполагая, что я это выяснил, я понятия не имею, как защитить вещи, которые не являются методами в моем контроллере. Могу ли я защитить весь маршрут?

Другой вопрос заключается в том, что, даже если я ограничиваю маршрут обновления, поля редактора на месте отображаются для всего. Я полагаю, что способ сделать это будет создать помощника, который будет отображать соответствующую версию в зависимости от того, вошел ли пользователь в систему или нет. Я просто не уверен, что я проверю, чтобы увидеть, если кто-то вошел в систему или нет, так как я делал все это в контроллере ... Кроме того, советы для этого: будет ли частичный просто отрендерить одну из 2 версий частичного в зависимости от состояния входа в систему, или есть ли другой способ сделать это?

Спасибо!

1 Ответ

1 голос
/ 04 октября 2009

По умолчанию Rails включает в себя следующие маршруты:

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

Кроме того, как вы, наверное, знаете, все общедоступные методы контроллера служат действиями контроллера.

Рассмотрим следующий контроллер:

class SampleController < ActionController::Base
  def test
    render :text => "text"
  end
end

То есть с маршрутами по умолчанию /sample/test будет вызывать SampleController#test

Также стоит знать, что in_place_edit_for(object, attribute, options = {}) определяет новый метод на контроллере под названием set_#{object}_#{attribute}. В вашем случае это set_quote_text.

Чтобы ответить на ваши вопросы:

  • Почему маршрут не отображается в rake routes: Почти наверняка это потому, что он использует тот маршрут по умолчанию, о котором я говорил в начале. Я часто удаляю эти маршруты, чтобы использовались только те маршруты, которые я определил.
  • Как защитить действие in_place_edit? : Теперь, когда вы знаете название действия, вы можете добавить его в список защищенных действий. Я предполагаю, что у вас есть что-то вроде before_filter :authentication_required, :only => LIST_OF_ACTIONS_REQUIRING_AUTHENTICATION. Однако безопаснее, чем это, использовать, кроме как предоставить список всех действий, которые вы не хотите защищать: before_filter :authentication_required, :except => LIST_OF_ACTIONS_THAT_DON'T_REQUIRE_AUTHENTICATION

Надеюсь, это то, что вам нужно.

...