私は今、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
ACL勧告に多くの感謝。認証は、認可とは明らかに異なります。まだ私の初期段階では、Rubyの構文とRailsの構文の間にぼんやりと読んでいるようです。私はあなたのコードをテストして、URLの操作を防ぐことによって動作します。 urlを操作すると、ユーザーのレコードのみが表示されます。しかし、私はフラッシュエラーが決して発生しないことに気づいた。 – fresh
申し訳ありませんが、URLを変更する際に "Unauthorized"と表示されるようになりました。あなたの時間をもう一度ありがとう。 – fresh
あなたは正しいです、私は許可を意味し、それを混乱させて申し訳ありません。フラッシュメッセージは表示されませんか?表示されている場合はメッセージを出力するステートメントが必要です。ジェネレータがこれを自動的に作成するかどうかはわかりません。 –