3

「must_have_permission_to_write」のようなbeforeフィルターが必要です。これを呼び出すと、ユーザーに書き込みの権限がない場合に、「それはできません」というメッセージが表示されます。そして戻る。

問題は、もちろん「アクションごとに1回だけレンダリングまたはリダイレクトできる」ということです... beforeフィルターで実行を停止するにはどうすればよいですか?ありがとう

4

3 に答える 3

3

最も簡単な答えは、リダイレクトを追加して、must_have_permission_to_writeメソッドにfalseを返すことだと思います。

def must_have_permission_to_write
  unless current_user.has_permission?(something)
    redirect_to access_denied_path 
    return false
  end
end

次に、どこかでアクセスが拒否された場合のアクションを作成し、ルートを追加して、必要なものをテンプレートに追加します。

于 2009-09-28T16:55:55.167 に答える
0

ここの投稿について気づいたことがいくつかあります。

  • before フィルタで render または redirect を呼び出すと、アクションがキャンセルされます。Rails がこれを行わなかった時期がありましたが、私の知る限り、これは現在自動的に行われています。このオンラインへの参照が見つからないようです。間違っている場合は誰かが訂正してください。
  • 「and return」の使用は、実際にアクションの中にいる場合にアクションをキャンセルする優れた方法です。上記の例では、メソッドはメソッドの最後で "and return" を呼び出す前のフィルター (つまり、個別のメソッド) として定義されていますが、あまり役に立ちません。
  • 誰かに「それはできない」と言うべきではないと思います。それは非常に安全な方法ではありません。誰かが許可を得ていないことを要求した場合、応答は 404 になります。そのように応答することで、この「好奇心旺盛な」人に多くの情報を提供していることになります。
于 2011-04-21T18:05:12.067 に答える
-1

and return次のように、を追加するだけです。

before_filter :must_have_permission_to_write

def must_have_permission_to_write
  redirect_to login_path and return unless current_user
end
于 2009-09-28T16:55:51.787 に答える