2011-07-25 19 views
0

Rails 2では、ユーザーがid#を変更して他のオブジェクトにアクセスするのを防ぐ方法を教えてください。例えばRailsのルートにセキュリティを追加する

website.com/users/1231/edit 

私は1231を変更し、別のアカウントにアクセスしてからユーザーを防ぐにはどうすればよいですか?

答えて

2

コントローラでbefore_filterを使用してください。

class Users < ApplicationController 
    before_filter :require_user, :only => [:show] 

    private 

    def require_user 
    @user = User.find_by_id(params[:id]) 
    redirect_to root_url if @user.nil? 
    end 

end 
+0

ありがとうChris Ledet! – Trip

+0

User.find(params [:id])は大丈夫です。find_by_idを行う必要はありません。 – eugen

+0

'Users#find'を使用すると、見つからなければ例外がスローされます。 –

8
@user = User.find params[:id] 
redirect_to :back unless current_user == @user 
+0

ありがとうalock27! – Trip

-1

カンカンやイージスのような権限チェックの宝石を使用してください。両方とも、すべてのコントローラのすべてのメソッドにパーミッションチェックを自動的に追加するという規則があります。

+0

承認メソッドをコード化する必要があります。また、承認メソッドをコード化する必要があります。したがって、1つのモデルと思われるものに必要なコードの量は、上記の修正と同等かそれを上回ります。私はcancanのファンですが、この状況では残酷です。 – recursive

+0

これは1つのモデルだけであることは言及されていません。例として1つのモデルがありますが、OPがすべてのコントローラーでこれを望んでいないと仮定する理由はありません。また、CanCanのようなものが存在することや、簡単な権限チェックの拡張された利点があることを認識していないこともあります。 – Pavling

関連する問題