RailsのFilter機能で特定のアクセスをブロック
Filter機能について気づいたこと
こちらに、RailsのFilter機能が書かれています。
くまくまーさん++
「継承時の 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もチェックするなどするしかないかぁ。