2011-01-06 4 views
2

私は今、Rails 3を始めました。私は、Rails 3の足場を「ログ」という表で使用して以下のコードを生成しました。他のユーザーレコードを返すようにURL操作を制限する

以下の 'index'関数は、(セッションテーブルに格納されたセッションからの)current_user.idに関連付けられたレコードのみを提供します。 3000 /ログ

問題:以下のルートがユーザ= 3(以下インデクスコードを参照)

ローカルホストとしてログインしてユーザー・レコードのみ提示されているユーザとして、私が見ることができます他のレコードを表示するには、手動でURLを編集して、私のレコード(ユーザー= 3である)ではありません、レコード:

はlocalhost:3000 /ログ/ 5

「これはuser.id = 2で入力されました」

解決策を探す:他のユーザーレコードを表示しないように手動でURLをハッキングしないようにするにはどうすればよいですか?

クラスLogsController < ApplicationControllerに

before_filter:新しい機能は以下の作成関数から欠落していることを無視してください

def index 
    @logs = Log.where(:user_id => current_user) 
    respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @logs } 
end 

をlogin_required。以下のコードは、単に私が最も簡単な解決策はログインが本当にログインに属して表示する場合はshowメソッドでチェックすることです

def create 
@log = Log.new(params[:log]) 
@log.user_id = current_user.id 
    respond_to do |format| 
    if @log.save 
    format.html { redirect_to(@log)} 
    format.xml { render :xml => @log, :status => :created, :location => @log } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @log.errors, :status => :unprocessable_entity } 
    end 
end 

答えて

4

「ログ」テーブルにuser_idのを置く方法を示すことですユーザーに:

def show 
    @log = Log.find(params[:id]) 
    unless @log.user_id == current_user.id 
    flash[:error] = "unauthorized" 
    redirect_to :index 
    end 
end 

しかし、あなたはすぐにへのアクセスを制限するいくつかのより多くのものを持つことになりますので、あなたは、宣言的にアクセス権を定義することを可能にする認証プラグインを探す必要があります。多分この1つ:https://github.com/be9/acl9

+0

ACL勧告に多くの感謝。認証は、認可とは明らかに異なります。まだ私の初期段階では、Rubyの構文とRailsの構文の間にぼんやりと読んでいるようです。私はあなたのコードをテストして、URLの操作を防ぐことによって動作します。 urlを操作すると、ユーザーのレコードのみが表示されます。しかし、私はフラッシュエラーが決して発生しないことに気づいた。 – fresh

+0

申し訳ありませんが、URLを変更する際に "Unauthorized"と表示されるようになりました。あなたの時間をもう一度ありがとう。 – fresh

+0

あなたは正しいです、私は許可を意味し、それを混乱させて申し訳ありません。フラッシュメッセージは表示されませんか?表示されている場合はメッセージを出力するステートメントが必要です。ジェネレータがこれを自動的に作成するかどうかはわかりません。 –

関連する問題