0

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

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

这有可能吗?

4

1 回答 1

2

在生产中,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. *= require_tree .从 /your_app/app/assets/application.css 中删除,否则您的自定义 css 文件将包含在应用程序布局中

content_for 文档

于 2012-06-09T14:58:16.453 回答