2012-01-29 1 views
0

私は、ユーザーが独自のページを作成し、一意のURLでアクセスできるアプリを開発しています。メールやパスワードなどの標準的なログインはありません。 ページのパスワードを設定するかどうかを決めることができます。 誰かがページを表示または編集したい場合、そのページにパスワードが設定されている場合は、パスワードの入力を求められます。そうでなければ、すぐにページを表示したり編集したりすることができます。 重大な回避策なしでこれを達成するための唯一の方法は、アクセス制御権をビューに入れ、if then elseを使用して出力を変更することです。Rails:ビューでページへのアクセスを制限することをお勧めしますか?

これは良い練習であるのか、それとも重大な脆弱性の問題につながる可能性があるのだろうかと思います。

答えて

1

短い答え:いいえ。できるだけロジックのビューをきれいに保つことはできません。さらに重要なのは、1つのコントローラやモデルに多くのロジックを積み重ねるのではなく、安らかなセットアップを使用する方が良いことです。ここでは、ユーザーの認証について説明します。通常、ユーザーがアクションに対してログインしていることを確認するには、before_filterを使用します。ですからコントローラのbefore_filterを使うことができます。渡されたメソッドを使用して、オブジェクトが保護されているかどうかを確認します。そのオブジェクトが保護されている場合は、そのユーザーが現在認証されているかどうかを確認します。

前のフィルタでは、代替操作にリダイレクトできます。好ましくは、パスワードフォームを使用するよう設定します。私はおそらくそれのための別のコントローラを作成するだろう。あなたが好きなセッションまたは認証と呼ぶことができます。パスワードフォームに新しいアクションを設定し、作成アクションを設定します。新しいビューは、ある種の隠しフィールドにpage_idを含める必要があります。または、ネストされたリソースを使用してそのルート内にpage_idを保持することができます。例えば:のようなルートを作成します

resources :pages do 
    resource :session, :only => [:new, :create] 
end 

あなたのcreateアクションで
/pages/1/session/new 
/pages/1/session (POST) 

は、あなたがしてセッションストアのようなセットアップ何かが(パスワードが正しい提供)することができます。認証チェックでは、そのセッションストアの値を確認するだけです。

+0

私は、単純化のためにMVCを破る魅力的なアイデアによって誤解を招きました。あまりにも多くの努力でそれをクリアしていただきありがとうございます。 – Isabaellchen

+0

それは簡単に落ちる誘惑です。しかし、ページへのアクセスを制限する方法を拡張したい場合はどうすればよいでしょうか?後ですべてのページを表示するログインIDなど。そうすれば、あなたは既にそれの基礎を成し遂げている仕事のいくつかを敷いておくでしょう。 – agmcleod

関連する問題