【问题标题】:Restricting Access in ERB code限制 ERB 代码中的访问
【发布时间】:2010-05-09 00:41:23
【问题描述】:

我正在尝试使用 ERB 构建 CMS。有没有一种方法可以让 ERB 代码对模型进行只读访问?例如,我希望能够在我的模型上加载任何信息(Model.all、Model.find_by_slug、Model.find_by_name、Model.other_model.name 等...),但我不想能够更改此数据。您能否禁止 ERB 执行会更改数据库的命令(Model.save、Model.update、Model.delete、Model.destroy 等)???

【问题讨论】:

  • 可能不会。一个常用的解决方案是使用专门的模板语言,如 liquid
  • 你为什么要这样做?可能有更好的方法来实现您的目标。
  • 我尝试了liquid,认为它对我有用,但我不知道如何将参数传递给我的liquid_methods。

标签: ruby-on-rails ruby content-management-system erb


【解决方案1】:

【讨论】:

    【解决方案2】:

    Rails 核心开发人员 Sven Fuchs 的 safemode 可以让您更安全、更安全。

    像liquid(我觉得很痛苦)或mustache这样的模板引擎可能比erb更容易学习和应用。

    【讨论】:

      【解决方案3】:

      在查找模型时尝试使用 :readonly 标志:

      @posts = Post.find(:all, :readonly => true)
      

      如果您尝试保存它 - 将抛出 ReadOnlyRecord 异常。但我也建议使用 Liquid 作为模板,因为用户对 ERB 模板中的应用程序变量没有限制访问权限。

      【讨论】:

        猜你喜欢
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        相关资源
        最近更新 更多