7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】adminページのアクセス制限方法

Last updated at Posted at 2021-03-29

こんにちは、たにーです。

今回もadminについてです。

admin専用のページには、adminだけが見れるのが当たり前だと思います。
ただ、チーム開発で他のチームでアクセス制限が出来ていないのが見られました。

今回は、その設定方法をまとめます。
他にも方法があると思いますが、チームメンバーで考えた結果これぐらいかなと思ってます。

他にあれば教えてください。

adminページのアクセス制限

下記は、現在のルートです。
adminでitemのindex~showまであるとします。

terminal
             Prefix Verb       URI   Pattern                 Controller#Action
        admin_items GET    /admin/items(.:format)            admin/items#index
                    POST   /admin/items(.:format)            admin/items#create
     new_admin_item GET    /admin/items/new(.:format)        admin/items#new
    edit_admin_item GET    /admin/items/:id/edit(.:format)   admin/items#edit
         admin_item GET    /admin/items/:id(.:format)        admin/items#show

もし、アクセル制限を行わないと、
管理者でない通常のお客さんでも商品登録が出来ちゃいます。(笑)

方法①

adminがもつコントローラーにそれぞれ記述する。

items_controller.rb
 before_action :authenticate_admin!

autehntiateは、「認証する」という意味です。

つまりこの記述は、

「このコントローラー(items_controller)に記述してあるアクションは、adminだけが使用できるよ。
 だから、アクションを実行する前に、adminであるか確認してね。」
 

を意味します。

adminじゃなければ、ログイン画面に遷移されます。

方法②

apllicationコントローラーで纏めてアクセス制限を行う方法。

application_controller.rb

class ApplicationController < ActionController::Base
  before_action :authenticate_admin!, if: :admin_url 
  
  def admin_url
    request.fullpath.include?("/admin")
  end
 
end

分解して解説します。

before_aciton

application_controller.rb
  before_action :authenticate_admin!, if: :admin_url

=> ①で説明しているのでベースは省きます。
  ifの部分ですが、「admin_urlを参照する」を意味します。
  
  この後に、「admin_url」のメソッドが記述します。

admin_url

application_controller.rb
  def admin_url
    request.fullpath.include?("/admin")
  end

=> request.fullpathで、飛んだ先のpathを全て取得します。
  include?(val)で、valと同じ要素が含まれていれば、trueを返します。
  
  つまり、**パスに「/admin」が含まれているかどうかを確認する。**です。

となります。

なので、 まとめると、

「pathに/adminが含まれている全てのページは、adminでログインしないと見れないよ。」

となります。

以上、たにーでした。

参考文献

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?