0

我正在尝试使用 Authlogic 来保护我在页面上拥有的一些就地编辑器字段。我已经保护了我的控制器中的所有方法,但看起来 in_place_editor 正在调用一些甚至没有出现在我的路由中的奇怪生成的东西,比如“/quotes/set_quote_text/1”。第一,有没有一个网站可以提供更多关于这些“秘密”路线的信息?还是这是我不知道的就地编辑添加的东西?当我显示所有路线时,它甚至没有出现,这有点令人不安。

假设我确实发现了这一点,我不知道如何保护控制器中不是方法的东西。我可以保护整条路线吗?

另一个问题是,即使我确实限制了更新路线,就地编辑器字段也会呈现所有内容。我想这样做的方法是创建一个助手,它会根据用户是否登录来呈现适当的版本。我只是不确定要检查什么以查看是否有人登录,因为我一直在控制器中完成所有操作......另外,提示:部分​​是否只呈现 2 个版本之一部分取决于登录状态,还是有其他方法可以做到这一点?

谢谢!

4

1 回答 1

1

默认情况下,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。然而,比这更安全的是使用 except 并提供您不想保护的所有操作的列表:before_filter :authentication_required, :except => LIST_OF_ACTIONS_THAT_DON'T_REQUIRE_AUTHENTICATION

希望这就是你所需要的。

于 2009-10-04T02:08:35.570 回答