読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

Railsで管理用のアプリをnamespaceで同居させるときのメモ

やりたいこと

  • 管理アプリもフロントアプリも同じプロジェクト内で共有するのがいいに決まってる。と思ってる
  • とはいえフロントからアクセスされないようにネットワーク設定以外に、アプリ的にも対応しておきたい。
  • 管理アプリは/adminというプレフィクスパスをつける

ルーティング

  • :namespaceを入れる
  namespace :admin  do
    resources :hoge
  end

ルーティングのテストはだいじだと思っている

    # AdminWeb
    it "routes to #index" do
      expect(get: "/admin/hoges")
      .to route_to(action: "index" , controller: "admin/hoges")
    end
  • これによって、hoge_pathとかのヘルパはadmin_hoge_pathとかになる。

controller

  • /adminサブディレクトリ切る
  • application_controller.rb
class Admin::ApplicationController < ActionController::Base
  layout 'admin/layouts/application'
~snip~
  • 他のコントローラは、このAdmin::ApplicationControllerを継承する。
  • layoutの指定大事。フロントと同じデザインはふつう使わないべ。

views

  • /adminサブディレクトリ切る。
  • layoutファイルでCSSとJSの指定をする
~snip~
    <%= stylesheet_link_tag "admin/application", :media => "all" %>
    <%= javascript_include_tag "admin/application" %>
~snip~

ただこれだとassetpipelineの仕様上、namespaceなしのapplication.jsなどで

//= require_tree .

しちゃうと、adminディレクトリ以下も読み込まれてしまうので、namespaceなしのアプリでもディレクトリ切って、指定しないと他のアプリとリソースがまざってしまうので、注意。

assets

  • 上記のとおり、それぞれadminディレクトリを切る。


こんなもんでしょうか。
なお、/adminなんてクラック目的のbotにまず最初に当られるパスだから、セキュリティ的な対処はちゃんとしてください。ネットワーク的に分断するのが一番だと思うけど、ムリなら、Webサーバで工夫、あと

  • サブドメイン限定( constraints subdomain: subdomain doを使う)にする
  • 認証機構

などなど、アプリでできることもやっておくべき。

シャイニング・ハーツ

シャイニング・ハーツ