【问题标题】:secure a specific /assets file from direct access in routes or else somehow?保护特定的 /assets 文件免受路由中的直接访问或以其他方式?
【发布时间】:2012-06-08 07:11:36
【问题描述】:

保护特定的 /assets 文件免受路由中的直接访问或其他方式的影响?

我的资产里面有 fronted.css 和 backend.css 这个后端 css 文件我会禁用从 URL 直接访问,所以它只能从我的 backend_controller.rb 内部加载。

这有可能吗?

【问题讨论】:

    标签: ruby-on-rails-3 ruby-on-rails-3.1 assets


    【解决方案1】:

    在生产中,Rails 不控制资产,这适用于网络服务器。您只能通过从网站的公共部分中排除来隐藏它们。

    您可以为前端和后端使用不同的布局,或者为自定义操作注入一些数据。

    布局方式:

    1. 在 backend_controller.rb 中:

      class BackendController...
        layout 'backend' #you can use :only or :except parameter if you need
        ...
      end
      
    2. 在 /your_app/app/assets/stylesheets 创建 backend.css 和文件夹 'backend',将所有后端样式表移动到 'backend' 文件夹中,然后在 backend.css 中插入:

      /*
       *= require_self
       *= require_tree ./backend
      */
      
    3. 在 /your_app/app/views/layouts 文件 backend.html.erb 中创建。这是您的后端布局。插入那里<%= stylesheet_link_tag "backend" %>

    4. 不要忘记从 /your_app/app/assets/application.css 行中删除 *= require_tree .(此指令递归,包括 /your_app/app/assets/stylesheets 中的所有文件和您的 backend.css 中的所有文件)。 如果您需要某些文件或目录,请使用 *= require file_name_without_extension*= require_tree ./directory_name

    注入方式:

    1. 在 /your_app/app/views/layouts/application.html.erb 中

      <!DOCTYPE html>
      <html>
        <head>
          <%= stylesheet_link_tag    "application", :media => "all" %>
          ...
          <%= yield :my_custom_css %>
        </head>
        ...
      
    2. 在您需要自定义样式表的任何文件中(例如 /your_app/app/views/categories/new.html.erb):

      <% content_for :my_custom_css do %>
        <%= stylesheet_link_tag 'backend' %>
      <% end %>
      
    3. 并从 /your_app/app/assets/application.css 中删除 *= require_tree .,否则您的自定义 css 文件将包含在应用程序布局中

    content_for documentation

    【讨论】:

    • 感谢您的精彩文章,我会按照您的建议执行它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2022-01-09
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多