保护特定/资产文件不受路由直接访问或以某种方式?

时间:2012-06-08 07:11:36

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

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

我的资产包括fronted.css和backend.css 这个后端css文件我将禁止从URL直接访问,因此它只能从我的backend_controller.rb中加载。

这有可能吗?

1 个答案:

答案 0 :(得分:2)

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

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

布局方式:

  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.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
  5. ,则需要一些文件或目录

    注射方式:

    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文件将包含在应用程序布局中
    4. content_for documentation