RailsのFilter機能で特定のアクセスをブロック

Filter機能について気づいたこと

こちらに、RailsのFilter機能が書かれています。
くまくまーさん++

http://wota.jp/ac/?date=0720


「継承時の Filter」の部分で、

Filter を評価した値(戻り値)が false である場合、その時点で Filter の適用は停止され、以降の Filter は実行されません。

アクセスできないわけですが、逆に考えるとアクセスをブロックできるということにも使えます。

jpmobileが使える前提

class ApplicationController < ActionController::Base
  private
  def :pc_user
     request.mobile? ? false : true
  end

  def :mobile_user?
     request.mobile? ? true : false
  end
end

class PC_User < ApplicationController
  before_filter :pc_user?

  def list
  end
end

class Mobile_User < ApplicationController
  before_filter :mobile_user?

  def list
  end
end


上記の例では、携帯電話 でpc_user/list へアクセスした場合、before_filter :pc_user? で false が返され、PC_Userクラスのlistメソッド は実行されないということになります。


もちろん逆も同じで、PC でmobile_user/list へアクセスした場合、before_filter :mobile_user? で false が返され、Mobile_Userクラスのlistメソッド は実行されないということになります。



これなら、Mobile_Userクラスは、携帯ユーザーに、PC_UserクラスはPCユーザーに提供できますね。



※ただ、user_agentを偽装されたら機能しませんので、ガチガチにやる必要があるならIPもチェックするなどするしかないかぁ。

環境

Ruby 1.8.6
Rails 1.2.3