レール:フィルターの前に入れて中断
-
18-09-2019 - |
質問
ユーザーが「できない!」というメッセージをレンダリングする許可がある場合に呼び出された場合、「ust_have_permission_to_write」のようなフィルターの前に欲しいそして戻る。
問題は、「アクションごとに 1 回しかレンダリングまたはリダイレクトできない」ということです...before フィルターで実行を停止するにはどうすればよいですか?ありがとう
解決
私は、最も簡単な答えは、リダイレクトを追加し、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
次に、ルートを追加し、どこかで拒否されたアクセスのためのアクションを作成し、テンプレートであなたが望むものは何でも入れます。
他のヒント
ここの投稿についていくつか気づいた点があります。
- before フィルターで render または redirect を呼び出すと、アクションがキャンセルされます。Rails がこれを行わなかった時期もありましたが、私の知る限り、現在はこれが自動的に行われています。オンラインではこれに関する参照が見つからないようです。私が間違っている場合は誰かが私を修正してください。
- 実際にアクション内にいる場合、「and return」を使用すると、アクションをキャンセルする優れた方法になります。上記の例では、メソッドは before フィルターとして定義されています (つまり、別々のメソッド) メソッドの最後で「and return」を呼び出すことはあまり役に立ちません。
- 誰かに「そんなことはできない」と言うべきではないと思います。それはあまり安全な行為ではありません。誰かが許可されていないものを要求した場合、応答は 404 である必要があります。そのように応答すると、この「好奇心旺盛な」人に過剰な情報を与えてしまうことになります。
ただ、やって同じように、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
所属していません StackOverflow